ホームページ >バックエンド開発 >PHPチュートリアル >PHPシンボルテーブル、その対処方法

PHPシンボルテーブル、その対処方法

WBOY
WBOYオリジナル
2016-06-13 12:08:142489ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。