ホームページ > バックエンド開発 > PHPチュートリアル > PHPリファレンスカウンター普及版解説_PHPチュートリアル

PHPリファレンスカウンター普及版解説_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:19:21
オリジナル
839 人が閲覧しました

PHPリファレンスカウンター普及版解説

概要

最近 PHP のリファレンス カウンター部分を調べましたが、最初はさまざまな混乱があって混乱しました。その後、ブログを読んで分析した後、よく覚えておくのに役立つ、比較的一般的な説明をまとめました。すべての読者にも役立ちます。ここでのブログ投稿の共有は、よりオーソドックスな説明です: PHP 変数リファレンス (http://hilojack.sinaapp.com/?p=1392)。

提案

PHP 参照カウンターの変更を調べるには、Xdebug 拡張機能をインストールした後、xdebug_debug_zval('var') を直接呼び出して変数 $var の参照カウンターを確認します。

基礎知識

参照カウンターについて話すには、PHP の変数のストレージと参照カウントのメカニズムを理解する必要があります。もちろん、参照カウントによりメモリが節約され、複数の変数シンボルがメモリ値空間 (変数コンテナとも呼ばれます) を共有できるようになります。参照カウントが変更されるタイミング: 割り当て。 割り当てには、値による転送と参照による割り当ての 2 種類があります。さらに理解しにくいのは、参照の割り当てです。参照カウントのもう 1 つの機能は、同じスペースを共有できる場合と、変数を分離する必要がある (新しいスペースが開かれる) 場合を示すことです。

人気の説明

理解と記憶を促進するために、課題のさまざまなシナリオについて一般的な説明をしていますが、実際の状況とは一致しません。 PHPリファレンスカウンター普及版解説_PHPチュートリアル

& 記号は

combination で、これは結婚に相当しますが、PHP では複数の人が一緒に結婚する (つまり、一夫多妻制または一夫多妻制) ことが許可されており、これは非常に異常です。 注意: 結婚するには同棲する必要があります。別居は認められません。結婚の他にシェアハウスという形態もあります。共有も一緒に住むことですが、関係はありません。複数人が一緒に住むことを許可するのは合理的で合理的です。もちろん、もっとわかりやすい別の状況として、一人暮らしがあります。次の例は、代入ステートメントとこれら 3 つの状態の間の対応を示しています。 シナリオ 1:

シナリオ 2:

$a = "a";  // $a 独居, is_ref = 0, refcount = 1;
$b = $a;   // $a 与 $b 合租, is_ref = 0, refcount = 2;
ログイン後にコピー
上記からわかるように、is_ref は結婚証明書として理解できます。=1 は 2 つ以上の変数が結婚していることを示します。=0 は結婚していません (家を共有するか一緒に住むことができます)。refcount は変数がいくつ存在するかを示します。 together, =1 は一人で暮らすことを意味し、>1 は複数人が一緒に暮らすことを意味します (結婚するには一緒に住む必要がありますが、同棲は必ずしも結婚を意味するわけではないことに注意してください)。

代入中の変数変化関係の分析を始めましょう:

シナリオ 1:

れーれー

シナリオ 2:


れーれー

シナリオ 3:


れーれー

シナリオ 4:


れーれー

シナリオ 5:


れーれー

シナリオ 6:


れーれー

シナリオ 7:


リーリー

シナリオ 8:

れーれー

上記は、自己参照の状況を除いた、単純な変数代入のさまざまな状況を分析しています。要約すれば:


単純な代入は、等号の左側にある変数の is_ref を確認する必要があります (つまり、is_ref = 1 の場合は値をコピーします)。それ以外の場合は、 の左側を考慮します。追加のメモリを割り当てずに左側の変数で取得できるかどうかを確認するための順序です。このとき、右側の変数が同じ記憶領域を共有しているかどうかを確認する必要があります。その場合、それらは一緒に住むことができず、右側の変数も単一である場合、それらはすべて COW (copy-on-write) 原則に従って同じメモリを共有します。

参照代入は、まず右側の変数の参照状態を確認する必要があります。 is_ref = 1 の場合、右側が参照されていない場合は、直接 refcount ++ します。 (is_ref = 0)、右側の人が一人暮らしかどうかを確認する必要があります。そうであれば、左右の 2 つの変数は右側の変数空間を共有します。そうでない場合は、右側の変数が元の場所から分離され、左側に新しいスペースが開きます。 参照代入である限り、左側の変数は、以前に結合または共有された変数から常に分離されている必要があります。









http://www.bkjia.com/PHPjc/875473.html

tru​​ehttp://www.bkjia.com/PHPjc/875473.html技術記事 PHP リファレンス カウンタの普及版の概要 最近、PHP のリファレンス カウンタ部分を調べていて、いろいろと混乱していたのですが、その後、ブログを読んで分析した結果、比較的よく使われている説明をまとめました。 ...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート