PHP 変数の実装方法: 最初に zval ポインターを宣言し、メモリの一部を適用します。次に、[ZVAL_STRING] マクロを通じて値を bar に設定します。最後に、この zval を現在のシンボル テーブルに追加し、定義します。そのラベルは foo です。
[関連する学習の推奨事項: php グラフィック チュートリアル]
php 変数の実装方法:
はじめに
公式の PHP 実装では、すべての変数は同じデータ構造 (zval) を使用して保存され、この構造は PHP の各変数も表します。タイプ。これには、変数の値だけでなく、変数の型も含まれます。これは PHP の弱い型付けの中核です。
変数ストレージ構造
PHP はカーネルで zval 構造を使用します。 , その定義は Zend/zend.h ファイルにあります。これは短く簡潔で、4 つのメンバーのみで構成されています:struct _zval_struct { zvalue_value value; /* 变量的值 */ zend_uint refcount__gc; zend_uchar type; /* 变量当前的数据类型 */ zend_uchar is_ref__gc; }; typedef struct _zval_struct zval; //在Zend/zend_types.h里定义的: typedef unsigned int zend_uint; typedef unsigned char zend_uchar;
変数のタイプ
zval 構造体の type フィールドは、弱い型付けを実装するための最も重要なフィールドです。可能性があるのは: IS_NULL 、
IS_BOOL、
IS_LONG、
IS_DOUBLE、
IS_STRING、
IS_ARRAY ,
IS_OBJECT,
IS_RESOURCE。文字通りに理解すると簡単ですが、これらは単に型の一意の識別子であり、型の違いに応じて値フィールドに異なる値が格納されます。さらに、これらで定義される型は
IS_CONSTANT と
IS_CONSTANT_ARRAY です。
例
<?php $foo = 'bar'; ?>
{ zval *fooval; MAKE_STD_ZVAL(fooval); ZVAL_STRING(fooval, "bar", 1); ZEND_SET_SYMBOL( EG(active_symbol_table) , "foo" , fooval); }
関連する学習に関する推奨事項:php プログラミング (ビデオ)
以上がPHP変数はどのように実装されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。