ホームページ >バックエンド開発 >PHPチュートリアル >PHP変数に関連する問題
PHP 変数の問題
$b='aaa';
$a=&$b;
$b='ddd';
unset($b);
echo $a;
このとき、ddd が出力されます。
質問: $a=&$b; この文は、変数 b の値を $a に代入します。 a も変更されます
unset($b) は変数 b を破棄します; echo $a それでも値を出力できるのはなぜですか?
-----解決策---------
$b='ddd' はすでに変更されています$b のメモリアドレス。
------解決策------------------
まず $a=&$b を実行します。上記は、$a を $b のアドレスに暗黙的にマップすることです。unset($b) の後は、$b とその値の間のマッピング関係をキャンセルするだけです。これは $a
には影響しません。これが説明なのかわかりません。 。 。ハン、私は長い間 PHP をやっていなかったので、表現力が低下しています。
------解決策---------
//C の観点から見ると、$a 変数の構造には $b 変数へのポインターが含まれています。つまり、$a は $b 変数のアドレスを保存します。 // unset($b) の後、PHP エンジンは実際にはこのアドレスの内容を解放しません。変数の解放のタイミングは、エンジンのメモリ リサイクル メカニズムによって決定される必要があります。 $b = 'aaa'; $a = &$b; $c = &$b;//ここに追加の参照が追加されているため、PHP エンジンもこれを考慮しているため、変数はすぐには解放されません。 //メモリの断片が多すぎる場合は、メモリの小さなブロックを繰り返し適用して効率を低下させることを避けるために、それらはリサイクルされて再利用されます。 $b = 'ccc'; 設定を解除($b); $c = 'ddd'; 設定を解除($c); echo '$a '.$a;//出力ddd //上記は単なる推測であり、参照のみを目的としています<div class="clear"></div>