PHPカーネルの内部構造を深く理解する(5)関数、内部構造を深く理解する_PHPチュートリアル
PHPカーネルの内部構造の深い理解(5)関数、内部構造の深い理解
PHP関数には、ユーザー定義関数、内部関数(print_r count...)、匿名関数、変数関数 ($func = ' print_r'; $func(array('a','b'));)
PHPカーネルソースコード内の関数は以下の種類に分類されます
リーリー1. ユーザー関数 (ZEND_USER_FUNCTION)
関数には明示的な戻り値があるとは限りません。PHP の実装では、明示的な戻り値がない場合でも、PHP カーネルは NULL を返します。
ZEND の実行プロセス中、ランタイム情報は _zend_execute_data に保存されます:
リーリープログラムの初期化プロセス中に、function_state も次の 2 つの部分で初期化されます。 リーリー
*arguments は関数パラメータへのポインタで、関数本体は *function に格納されます。*function は最終的にユーザー定義関数に関するすべての情報を格納する構造です。具体的な構造は次のとおりです。 リーリーzend_function の構造体の op_array には、関数内のすべての操作が格納されます。関数が呼び出されると、ZEND は op_array 内の opline を 1 つずつ順番に実行し、最終結果を返します。関数の定義と実行は分離されており、関数は独立した実行単位として存在できます。
2. 内部関数 (ZEND_INTERNAL_FUNCTION) ZEND_INTERNAL_FUNCTION 関数は拡張機能または Zend/PHP カーネルによって提供され、c/c++ で記述され、直接実行できます。内部関数の構造は次のとおりです
。 リーリーモジュールが初期化されると、ZE はロードされた各拡張モジュールを走査し、モジュール内の function_entry で指定された各関数 (module->functions) の zend_internal_function 構造体を作成し、そのタイプを ZEND_INTERNAL_FUNCTION に設定します。グローバル関数テーブル (HashTable 構造)、関数の設定と登録のプロセスについては、Zend/zene_API.c ファイルの zend_register_function 関数を参照してください。この関数は、関数ページの処理に加えて、これらのマジック メソッドを含むクラス メソッドも処理します。
内部関数の構造は基本的にユーザー定義関数の構造と似ていますが、いくつかの違いがあります:
callメソッド、handlerフィールド、それがZEND_INTERNAL_FUNCTIONの場合、ZENDはzend_execute_internalを呼び出し、zend_internal_function.handlerを通じてこの関数を実行します。ユーザー定義関数は中間コードを生成し、その中間コードを呼び出される相対メソッドにマップする必要があります。
- 組み込み関数には、それがどのモジュールに属しているかを示す追加のモジュールフィールドが構造内にあります。拡張モジュールが異なれば異なります
- 型フィールド ユーザー定義関数では、型フィールドはほとんど役に立ちませんが、組み込み関数の型フィールドは、いくつかの内部関数間の区別として機能します。
3. 変数関数 変数名の後に括弧がある場合、PHPは変数の値と同じ名前の関数を探して実行しようとします。
変数関数$func
リーリーコンパイルされた中間コード
リーリー内部機能
リーリーコンパイルされた中間コード
リーリー比較すると、中間コードの呼び出しが変数関数が DO_FCALL_BY_NAME であるのに対し、内部関数は DO_FCALL であることがわかります。これは構文解析中にすでに決定されています。 Zend/zend_complie.c ファイルの zend_do_end_function_call 関数のコードの一部を参照してください。 リーリー
メソッドではなく動的に呼び出されず、関数名が文字列変数の場合、生成される中間コードは ZEND_DO_FCALL になります。それ以外の場合は、ZEND_DO_FCALL_BY_NAME です。また、変数関数はコールバック関数として使用され、その処理プロセスは Zend/zend_complie.c ファイルの zend_do_pass_param 関数内にあり、最終的に中間コードの実行時に ZEND_SEND_VAL_SPEC_CONST_HADNLER などの関数に反映されます。
4. 匿名関数
匿名関数は、識別子を指定せずに呼び出すことができる関数またはサブルーチンの一種で、他の関数にパラメータとして渡すことができます。
http://www.bkjia.com/PHPjc/1099824.html
ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー
