ホームページ  >  記事  >  バックエンド開発  >  PHP7カーネル解析 4つのローカル変数、グローバル変数、定数

PHP7カーネル解析 4つのローカル変数、グローバル変数、定数

不言
不言オリジナル
2018-04-13 14:58:262141ブラウズ

この記事の内容は、PHP7 カーネル分析 4 のローカル変数、グローバル変数、および定数に関するものです。必要な友達はそれを参照してください

1 でのローカル変数の割り当て。 PHP zend_execute_data 構造では、zend_op_array を実行するたびに新しい zend_execute_data が生成されます。これがローカル変数のライフサイクルです。

読み取りおよび書き込み操作: ローカル変数は、コンパイル時に決定された数によって読み取りおよび書き込みされます

2. 静的変数

静的変数の格納場所: zend_op_array->static_variables (ハッシュ)したがって、PHP の静的変数は通常のローカル変数とは異なり、実行空間 zend_execute_data に割り当てられるのではなく、ハッシュ テーブルの形式で zend_op_array に保存されます。静的変数は 1 回だけ初期化されます。 注: この機能は、静的変数の初期値を変数にすることはできないことも意味します。そのような定義はエラーになります 読み取りおよび書き込み操作: まず、変数名に従って static_variables から対応する zval を取り出し、それを参照型に変更してローカル変数に代入します。 static $count = 4; 厳密には $count という 2 つの操作が含まれています。これは実際の静的変数ではなく、実行時の実際の操作は次のとおりです。 $count = & static_variables["count"] ;

PHP7カーネル解析 4つのローカル変数、グローバル変数、定数

3. グローバル変数


グローバル変数は、リクエストの実行中に常に存在します (executor_globals、Zend executor 関連のグローバル変数)。これは、zend_execute_ex の実行が開始される前のハッシュ テーブルでもあります。

読み取りおよび書き込み操作: 静的変数へのアクセスと同様に、グローバル変数も元の変数に変換されます。値を参照に取り込み、インポートされたスコープ内にグローバル変数を作成します。ローカル変数は参照を指します

4。定数は EG の zend_constants ハッシュ テーブルに格納されます。アクセスする際には、定数名に従ってハッシュテーブル内も直接検索されます
typedef struct _zend_constant {
    zval value;   //常量值
    zend_string *name; //常量名
} zend_constant;

関連推奨: PHP7カーネル解析 4つのローカル変数、グローバル変数、定数PHP7 カーネル解析 1 CGI と FastCGI


PHP7 カーネル解析 2 I/O モデル

PHP7 カーネル分析 3 変数

以上がPHP7カーネル解析 4つのローカル変数、グローバル変数、定数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。