| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
変数入門
変数がどのように格納され処理されているのかについてきちんと理解することは、
前述の内容もう少し正確に言うと、PHPは高水準言語であり、緩い型付けにより変数は エンジニアの好みに応じて暗黙に解釈され、実行時に必要な型に強制的に変換されます。 参照カウント法は、ある変数がユーザーのコードの中でもはや参照されなくなったことを エンジンが推測し、その変数に関連付けられた構造体を開放するという仕組みです。
PHP内部の変数は、すべて typedef struct _zval_struct { zvalue_value value; /* 変数の値 */ zend_uint refcount__gc; /* 参照回数 */ zend_uchar type; /* 変数の型 */ zend_uchar is_ref__gc; /* リファレンスフラグ */ } zval;
typedef union _zvalue_value { long lval; /* long 値 */ double dval; /* double 値 */ struct { char *val; int len; /* 常に文字列用として設定されます */ } str; /* 文字列(常に長さを持ちます) */ HashTable *ht; /* 配列 */ zend_object_value obj; /* オジュジェクト格納用ハンドルやハンドラを保持します */ } zvalue_value;
この構造体により、ある変数はいずれかひとつの型を持つことができ、そのデータは
エンジンが公開しているマクロのうち、
参照カウント法の原理の章をチェックして、 参照カウント法や参照がどのような仕組みで動いているのかを調べてみてください。
さらに PHP 自体は弱い型付けしか行いませんが、エンジンが変数の型を別の型にするための API 関数を提供しています。
ここまで読んでもらえたので、あなたはネイティブからエンジンまでの型、 型の検出とzval 値の読み取り方法、参照カウントや zval のフラグの操作等についての 理解が進んだはずです。 |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「変数入門」をGoogle検索
|