この記事の内容は、PHP7 カーネル解析 6 の関数に関するものです。必要な友達は参考にしてください。
1. 関数のストレージ構造EG の function_table 属性は、PHP のすべての関数を記録するハッシュ テーブルです
2. 関数パラメータ
カーネル実装の関数パラメータは、実際には関数内のローカル変数と同じです。関数が呼び出されると、まずパラメータの値を呼び出し場所の各パラメータのそれぞれの場所にコピーしますtypedef union _zend_function zend_function; union _zend_function { zend_uchar type; struct { zend_uchar type; zend_uchar arg_flags[3]; uint32_t fn_flags; zend_string *function_name; zend_class_entry *scope; //成员方法所属类,面向对象实现中用到 union _zend_function *prototype; uint32_t num_args; //参数数量 uint32_t required_num_args; //必传参数数量 zend_arg_info *arg_info; //参数信息 } common; zend_op_array op_array; //自定义函数(函数实际编译为普通的zend_op_array) zend_internal_function internal_function; //内部函数(通过扩展或者内核提供的C函数) };
3. 内部関数内部関数は、カーネルおよび拡張機能によって提供される C 言語で記述された関数を指します。このような関数は、オペコードのコンパイル プロセスを経る必要はありません。したがって、呼び出されるときは、PHP ユーザー定義関数よりも効率的です。C プログラムとの違いはありません。 Zend エンジンは、ユーザーが PHP で使用できる多くの内部関数 (define、define、strlen、method_exists、class_exists、function_exists... など) を定義します。Zend エンジンで定義された内部関数に加えて、PHP 拡張機能も定義されています。内部機能も豊富に用意されており、拡張機能による柔軟なカスタマイズも可能です。
zend_function.common.xx快速访问到zend_function.zend_op_array.xx及zend_function.zend_internal_function.xx zend_function.type取到zend_function.op_array.type及zend_function.internal_function.type
PHP7 カーネル分析 5 - PHP コードのコンパイル
PHP7 カーネル分析 4 - ローカル変数、グローバル変数、定数以上がPHP7 カーネル解析 6 関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。