PHP の参照カウントと変数 Reference_PHP チュートリアル

WBOY
リリース: 2016-07-12 09:08:37
オリジナル
862 人が閲覧しました

phpの参照カウントと変数参照

各 php5.5 変数は、zval と呼ばれる変数コンテナーに保存されます。
zval 変数コンテナには、変数の型と値に加えて、2 バイトの追加情報も含まれます:
1. 1つ目はbool型の「is_ref」で、この変数が参照セット(参照セット)に属しているかどうかを識別するために使用され、属している場合は値が1、そうでない場合は0になります。
この変数を使用すると、phpエンジンは通常の変数と参照変数を区別できます。
2. 2つ目は「refcount」で、このzval変数(シンボル)を指すポイントの数を示すために使用されます。すべてのシンボルにはスコープがあり、メインのスクリプトや関数、メソッドにもスコープがあります。
すべてのシンボルはシンボルテーブルに存在します。
変数に定数値が割り当てられると、次の例のように zval 変数コンテナが生成されます。
$a = "Hello world";
?>
このとき、以下のプログラムを実行して、zvalコンテナ内のis_refとrefcountの値を指す$a変数を取得します
$a = "Hello world";
print_r(xdebug_debug_zval('a'));
?>
a: (refcount=1, is_ref=0)='Hello world'
次に、参照代入と通常代入を調べるために次の実験を行います。
まず、$b が $a を指すようにし、次のように is_ref、refcount を確認します。
$a = "こんにちは"
;
$b = $a;
print_r(xdebug_debug_zval('a'));
print_r(xdebug_debug_zval('b'));
?>
a: (refcount=2, is_ref=0)='Hello world'
b: (refcount=2, is_ref=0)='Hello world'
$b が $a を参照するようにし、is_ref refcount を確認します。以下のように
$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 をバインドすることはできません。シンボル テーブルの名前と値のバインディング)。参照リターンを使用して、関数によって選択された変数を参照できます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1053350.html技術記事 PHP の参照カウントと変数参照 各 PHP5.5 変数は、zval と呼ばれる変数コンテナーに保存されます。 zval 変数コンテナには、変数の型と値に加えて、2 バイトも含まれます...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート