PHP変数の引用に関する疑問

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 12:47:29912ブラウズ

PHP における変数参照に関する混乱
変数の参照と代入についてはすでによく理解しているつもりでしたが、私の理解を完全に覆す次の問題に遭遇しました

<br />
<?php <br />
  $str = 'WangChuanbo';<br />
  $s = &$str;<br />
  unset($str);<br />
  echo $s,'hello world';<br />
?>

その結果、$s は出力された後も Wangchuanbo のままで、元の変数はアンロードされ、参照変数には値が残っているのではないでしょうか? ?

php 変数参照
------解決策------------------
張飛の姓は張飛、名は張飛です。イデ
です つまり、張飛と張一徳は同一人物です
張飛を殺したということは、張飛という名前を世界から消しただけで、その人物は未だに張一徳
という肩書きで徘徊している-----解決策---------- -- -----------
参照を設定解除します。これは、変数名と変数の内容の間のバインドを解除するだけです
$s = &$str; php では
を意味します $s と $str はどちらも同じ場所 C
を指します 設定を解除した後、$str は C
を見つけることができません 別の例を挙げてみましょう
シャオ・チャンはシャオ・リーから宝物が海にあると聞きました
シャオ・リーは記憶を失っていますが、シャオ・チャンは宝が海にあることをまだ知っています

C では、参照はメモリアドレスさえも同じであることを意味します
最終的には、これは定数ポインタです
-----解決策---------
単純に
を入れます C のポインタはメモリ内の特定のアドレスを指します
C ポインターにはデータ型の概念があるため、ポインターは操作に参加できます
PHP コードはマシンコードにコンパイルされていないため、メモリ アドレスへのアクセスについての話はありません
確かに、PHP の参照機構は C のポインタとよく似ています。ポインタの操作を除けば、少なくともパフォーマンスはポインタ

と同じです。 ---解決策----- ---------------
まず、変数の設定を解除するときは、PHP のガベージ コレクションのメカニズムを理解する必要があります。記憶から消えるわけではありません! PHP のガベージ コレクションは GC によって行われます。
------解決策---------
お気に入りに追加~~


-----解決策---------
引用:
引用: 参照の設定を解除します。これは、変数名と変数の内容の間のバインドを解除するだけです
$s = &$str; は、PHP では
を意味します。 C では、参照はメモリアドレスさえも同じであることを意味します
……

もちろん、このように理解することに固執する場合は、笑
F ドライブに fff フォルダーがあるので、右クリックして [送る => デスクトップ ショートカット]
次に、名前を aaa に変更し、もう一度実行して、名前を bbb
に変更します。 aaa を開いてその中に txt を作成し、次に bbb を開くとその中に txt が作成されます
そういうことじゃないですか


-----解決策---------
6 階が正しい、そうする必要がある理解する PHP のガベージコレクションメカニズムを理解する必要があります

PHP 変数は C/C とは異なります。PHP 変数は ZVAL 構造体に格納されます。構造体は次のように定義されます。 typedef struct _zval_struct zval;
...
struct _zval_struct {
/* 変数情報 */
zvalue_value 値; /* 値 */
zend_uint refcount__gc; zend_uchar タイプ; /* アクティブなタイプ */
zend_uchar is_ref__gc;
};
zval 構造体には 4 つのフィールドがあり、それらの意味は次のとおりです:

デフォルト値を意味する属性名
refcount__gc は参照カウント 1 を表します
is_ref__gc は参照 0 かどうかを示します
value には変数
の値が格納されます。 type 変数
の特定の型
unset() は変数を直接破棄しません。refcount=0
の場合にのみ、PHP のガベージ コレクション メカニズムによってリサイクルされます。
$a = 10;
xdebug_debug_zval('a'); //出力: a: (refcount=1, is_ref=0)=10
$b = &$a;
xdebug_debug_zval('a'); //出力: a: (refcount=2, is_ref=1)=10
$a = 20;
xdebug_debug_zval('a'); //出力: a: (refcount=2, is_ref=1)=20
unset($b);
xdebug_debug_zval('a'); //出力: a: (refcount=1, is_ref=0)=20




-----解決策--------------------------------

実際、多くの人が引用符を解釈しています。誰もが PHP の基礎となる実装について話したがりますが、実際にはこれは間違っています。
説明は深い原則ではなく、単純な原則に基づいて行う必要があります。そうしないと、ますます混乱してしまいます
C 言語の本では、高レベルの人がまだ理解していないため、ポインタの説明にアセンブリ言語を使用しないのと同じように、低レベルの人はどうやって理解できるのでしょうか
PHP 参照はポインタと同様に動作します。したがって、「ポインタ」と考えて問題ありません 参照を「ポインタ」として扱わないでください

それを理解する別の方法は
です。 ポインタは番地に従って商店街の各店舗に出入りするので、次の店舗がどこにあるのか明確にわかります
引用はお店の看板に従って出入りするので、隣に誰がいるのか分かりません
それ以外は、両者にパフォーマンスの差はありません
-----解決策---------
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。