この記事では、主に PHP ソース コードに関する第 15 章を紹介します。array_walk 関数に関しては、必要な友人に参照してもらえるように共有します。 PHP ソース コードの第 10 章 5: array_walk 関数について
array_walk
(PHP 3 >= 3.0.3, PHP 4, PHP 5)
array_walk — ユーザー関数の適用array の各メンバーにDescription
bool array_walk (array &array, callback funcname [,mixed userdata] )
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
ユーザー定義関数 funcname を配列 array 内の各セルに適用します。通常、 funcname は 2 つのパラメータを受け入れます。配列パラメータの値が最初のパラメータとして使用され、キー名が 2 番目のパラメータとして使用されます。オプションの引数 userdata が指定されている場合、それはコールバック funcname の 3 番目の引数として渡されます。funcname 関数に指定されたパラメーターよりも多くのパラメーターが必要な場合、array_walk() が funcname を呼び出すたびに E_WARNING レベルのエラーが生成されます。これらの警告は、array_walk() 呼び出しの前に PHP のエラー演算子 @ を付けるか、error_reporting() を使用することで抑制できます。
注: funcname が配列内の値に直接作用する必要がある場合は、funcname の最初のパラメーターを参照として指定します。したがって、これらのセルを変更すると、元の配列自体も変更されます。
注: キー名とユーザーデータを funcname に渡す機能は、PHP 4.0 の新機能です。
array_walk() は、配列の内部配列ポインタの影響を受けません。 array_walk() は、ポインタの位置に関係なく、配列全体を調べます。 (これは、プログラムが配列トラバーサルの開始時に配列が配置されているハッシュ テーブルのポインターをリセットするためです。)
プログラム実装の説明:
拡張機能の最後の呼び出しは関数 php_array_walk です:
static int php_array_walk(HashTable *target_hash, zval **userdata, int recursive TSRMLS_DC)
再帰 = の場合= 1、この関数は array_walk_recursive 関数の実装です
ソース コードでは、プログラムは配列全体を走査し、配列要素ごとに、渡された関数に基づいて関連する関数呼び出しを行います
関数呼び出しは次のとおりです。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) {
typedef struct _zend_fcall_info { size_t size; // 整个结构体的长度,等于sizeof(此函数体的变量) HashTable *function_table; // executor_globals.function_table zval *function_name; // 函数名 HashTable *symbol_table; zval **retval_ptr_ptr; // 函数的返回值 zend_uint param_count; // 参数个数 zval ***params; // 所调用函数的参数 zval **object_pp; // 用于对象的方法调用时,存储对象 zend_bool no_separation; // 是否清空参数所在的栈} zend_fcall_info;
上記は個人的なメモです。間違いがある場合はご了承ください。 、訂正してください!
EOF
以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
PHP ソース コード 14 についての簡単な説明: array_combine 関数について についての簡単な説明PHP ソース コード 13: array_change_key_case と array_chunk の概要 PHP ソース コード 12 の簡単な説明: return_value 戻り値以上がPHP ソース コードの簡単な説明 15: array_walk 関数についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。