ホームページ >バックエンド開発 >PHPチュートリアル >PHPシンボルテーブル、その対処方法
PHP シンボル テーブル
シンボル テーブル
1 についていくつか質問があります。これは正しい理解ですか?
(1) シンボル テーブルはデータベースと同じようにキーと値の構造です。 。新しい変数が作成されるたびに、レコードがシンボル テーブルに追加されます。
(2) $a=1 のとき、キーを a、値をメモリを指すアドレスとして 0x111222 とするデータをシンボルテーブルに追加します。 $b=$a の場合、b に対応する値も 0x111222 になります。
2. $c = & $a の場合、強制的に分離されます。強迫性障害に関するいくつかの疑問が生じますが、誰が別れるのですか?つまり、アドレス 0x111222 は $b ですか、それとも $a/$c ですか?
3. unset($a) については、ポインタを切断すると書かれています。実際にシンボルテーブルの $a レコードを削除しているのでしょうか?
------ソリューションのアイデア----------------------
$a = 12;
$b = $a;
$c = &$a;
echo $b."_".$c; /12_12
$a = 15;
echo $b."_".$c;//12_15
?>
& は変数や関数のアドレスなどを参照します。この & は、C 言語のポインタに似ています。$b=$a; は、変数 a の値を変数 b に代入するだけで、変数 b はそれに応じて変化しません。
------解決策のアイデア----------------------こんな感じです:
$ b= $a は、a に対応する値を b に割り当てるだけで、アドレスを b に割り当てません。
$c=&$a は、a から c、つまり a のアドレスを分離する参照割り当てです。 c が何であれ、
unset($a)、切断します。実際には $a が指すアドレス (先ほど述べた 0x111222 など) を切断します。指す接続を切断するだけですが、このアドレスのアドレスの値はまだ存在します。 。 。 。 。 。 。
表現がわかりにくいかもしれません
お役に立てれば幸いです
-----解決策のアイデア-------- - ------------1. あなたの理解は正しいです
2.$c = & $a は $b $c をコピーし、$a は 0x1112223.unset($a) は、symbol_table から $a を削除し、$a の zval を変更するだけです --recount if recount==0 then gc