麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

淺談PHP源碼十五:關(guān)于array_walk函數(shù)

2020-03-22 19:59:11
字體:
供稿:網(wǎng)友
這篇文章主要介紹了關(guān)于淺談PHP源碼十五:關(guān)于array_walk函數(shù) ,有著一定的參考價值,現(xiàn)在分享給大家,有需要的朋友可以參考一下

淺談PHP源碼十五:關(guān)于array_walk函數(shù)

array_walk

(PHP 3 = 3.0.3, PHP 4, PHP 5)
array_walk — 對數(shù)組中的每個成員應(yīng)用用戶函數(shù)
說明

bool array_walk ( array array, callback funcname [, mixed userdata] )

如果成功則返回 TRUE,失敗則返回 FALSE。
將用戶自定義函數(shù) funcname 應(yīng)用到 array 數(shù)組中的每個單元。典型情況下 funcname 接受兩個參數(shù)。array 參數(shù)的值作為第一個,鍵名作為第二個。如果提供了可選參數(shù) userdata,將被作為第三個參數(shù)傳遞給 callback funcname。
如果 funcname 函數(shù)需要的參數(shù)比給出的多,則每次 array_walk() 調(diào)用 funcname 時都會產(chǎn)生一個 E_WARNING 級的錯誤。這些警告可以通過在 array_walk() 調(diào)用前加上 PHP 的錯誤操作符 @ 來抑制,或者用 error_reporting()。
注意: 如果 funcname 需要直接作用于數(shù)組中的值,則給 funcname 的第一個參數(shù)指定為引用。這樣任何對這些單元的 改變也將會改變原始數(shù)組本身。
注意: 將鍵名和 userdata 傳遞到 funcname 中是 PHP 4.0 新增加的。

array_walk() 不會受到 array 內(nèi)部數(shù)組指針的影響。array_walk() 會遍歷整個數(shù)組而不管指針的位置。(這是由于程序在數(shù)組遍歷開始時就重置了數(shù)組所在hash table的指針)
用戶不應(yīng)在回調(diào)函數(shù)中改變該數(shù)組本身。例如增加/刪除單元,unset 單元等等。如果 array_walk() 作用的數(shù)組改變了,則此函數(shù)的的行為未經(jīng)定義,且不可預(yù)期。
程序?qū)崿F(xiàn)說明:
擴(kuò)展最后調(diào)用的是函數(shù)php_array_walk:

 html' target='_blank'>static int php_array_walk(HashTable *target_hash, zval **userdata, int recursive TSRMLS_DC)

當(dāng)recursive == 0時,此函數(shù)為array_walk函數(shù)實(shí)現(xiàn)

當(dāng)recursive == 1時,此函數(shù)為array_walk_recursive函數(shù)的實(shí)現(xiàn)

源碼中,程序會遍歷整個數(shù)組,并針對每個數(shù)組元素,根據(jù)傳入的函數(shù),作相關(guān)的函數(shù)調(diào)用
函數(shù)的調(diào)用如下:

fci.size = sizeof(fci); fci.function_table = EG(function_table); fci.function_name = *BG(array_walk_func_name); fci.symbol_table = NULL; fci.object_pp = NULL; fci.retval_ptr_ptr = retval_ptr; fci.param_count = userdata ? 3 : 2; fci.params = args; fci.no_separation = 0; /* Call the userland function */ if (zend_call_function( fci, array_walk_fci_cache TSRMLS_CC) == SUCCESS) {

在此函數(shù)調(diào)用中有使用到一個結(jié)構(gòu)體,個人添加的注釋如下:

 typedef struct _zend_fcall_info { size_t size; // 整個結(jié)構(gòu)體的長度,等于sizeof(此函數(shù)體的變量) HashTable *function_table; // executor_globals.function_table zval *function_name; // 函數(shù)名  HashTable *symbol_table; zval **retval_ptr_ptr; // 函數(shù)的返回值 zend_uint param_count; // 參數(shù)個數(shù) zval ***params; // 所調(diào)用函數(shù)的參數(shù) zval **object_pp; // 用于對象的方法調(diào)用時,存儲對象 zend_bool no_separation; // 是否清空參數(shù)所在的棧} zend_fcall_info;

以上為個人所注,如有錯,請指正!

EOF

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請關(guān)注PHP !

相關(guān)推薦:

淺談PHP源碼十四: 關(guān)于array_combine函數(shù)

淺談PHP源碼十三:關(guān)于array_change_key_case,array_chunk的介紹

淺談PHP源碼十二:關(guān)于return_value 返回值

以上就是淺談PHP源碼十五:關(guān)于array_walk函數(shù)的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲成人国产 | 成人黄色短视频在线观看 | 久久撸视频 | 欧美特黄特色视频 | 黄色一级片在线观看 | 日韩视频一区二区三区在线观看 | 99视频网 | 国产精品一区二区三区在线看 | 久久国产精品免费视频 | 二区三区四区视频 | 成人免费一区二区三区在线观看 | 亚洲电影在线观看高清免费 | 国产日韩欧美一区 | 最近国产中文字幕 | 黄在线观看在线播放720p | 国产午夜电影在线观看 | 欧美黄色大片免费观看 | wwwxxx免费视频| 91精品观看91久久久久久国产 | 免费在线观看毛片视频 | 久久久一区二区三区视频 | 在线免费日韩 | 久久久裸体视频 | 深夜网站在线观看 | h视频免费看 | 九九热免费观看 | 精品久久久久久久久久久久 | 欧美老外a级毛片 | 午夜久久久精品一区二区三区 | 国产四区 | 成人一区二区在线观看视频 | 中文字幕综合在线观看 | 在线 日本 制服 中文 欧美 | 亚洲一区二区三区高清视频 | 一级免费黄视频 | 日本在线播放一区 | 澳门一级淫片免费视频 | 久久国产精品系列 | 一级电影在线观看 | 久久久久久久网站 | 中国av免费在线观看 |