$a = "こんにちは"
;
$b = &$a;
print_r(xdebug_debug_zval('a'));
print_r(xdebug_debug_zval('b'));
?>
a: (refcount=2, is_ref=1)='Hello world'
b: (refcount=2, is_ref=1)='Hello world'
上記のことから、変数が対応する zval コンテナを参照する場合、is_ref は 1 であることが分析できます。
さらに分析して、次のように $b を $a に参照し、$c は $a を指します
リーリー
印刷結果は以下の通りです
a: (refcount=2, is_ref=1)='Hello world'
b: (refcount=2, is_ref=1)='Hello world'
c: (refcount=1, is_ref=0)='Hello world'
この時点で、php5.5エンジンは$cのzvalコンテナを再構築していることがわかります。コンテナ内のデータ型と値は、$aが指すコンテナ内のデータ型と値とまったく同じです。 refcount と is_ref の値です。
したがって、php5.5 の zval コンテナ内の is_ref 変数は、参照コレクションまたは通常のコレクションのいずれかを識別し、両方が存在する場合、競合の問題を解決するために zval コンテナを複製することがわかります。
概要:
1. PHP5.5以降、「変数の割り当て」とはポイントの割り当て、つまり変数が特定のzvalコンテナを指すことを指します。
2.「変数参照」は、変数と変数をバインドします。バインドされた変数の 1 つが方向を変えると、相互にバインドされている他の変数の方向も変わります。
変数が変数を再参照すると、元の変数のバインドが解放され、代わりに新しい変数がバインドされます。次のコード:
リーリー
これにより、関数の呼び出し時に foo 関数内の $var 変数が $bar にバインドされますが、その後 $GLOBALS["baz"] に再バインドされます。関数 foo には変数 $bar が存在しないため ($var として表されますが、$var には変数の内容のみが含まれ、呼び出しはありません)、参照メカニズムを通じて関数呼び出しスコープ内の別の変数に $bar をバインドすることはできません。シンボル テーブルの名前と値のバインディング)。参照リターンを使用して、関数によって選択された変数を参照できます。
http://www.bkjia.com/PHPjc/1053350.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1053350.html技術記事 PHP の参照カウントと変数参照 各 PHP5.5 変数は、zval と呼ばれる変数コンテナーに保存されます。 zval 変数コンテナには、変数の型と値に加えて、2 バイトも含まれます...