私は以下のコードを持っています。私は値をつけて再び使用するために$ bを変更したい。私がそうするなら、それは$ aも変えます。以前に$ aへの参照として割り当てた後に、$ bに値を再度割り当てることはできますか?PHPは変数から "reference"を削除します。
$a = 1;
$b = &$a;
// later
$b = null;
私は以下のコードを持っています。私は値をつけて再び使用するために$ bを変更したい。私がそうするなら、それは$ aも変えます。以前に$ aへの参照として割り当てた後に、$ bに値を再度割り当てることはできますか?PHPは変数から "reference"を削除します。
$a = 1;
$b = &$a;
// later
$b = null;
参照の説明をインライン
$a = 1;
$b = &$a;
今$ bと$ aは2つの異なる名前の同じ変数になります
unset($b);
$ b名前はなくなりましたが、文脈から消えましたが、$ aは依然として利用可能です。
$b = 2;
$ bは新しい値を持つ新しい変数と同じです。新しい人生を始める。
$a = 1;
$b = &$a;
unset($b);
// later
$b = null;
まず:$b
から$a
からの参照を作成する2つの変数の間(よりよい単語の欠乏のために)接続を作成し、その$b
変更はまさにそれがある方法ですとき$a
を変更働くことを意味する。
だから、あなたが参照を壊したいと仮定すると、IST
unset($b);
$b="new value";
最も簡単な方法は、@xdazzによって答えが正しいのですが、ちょうどPHP Manualから次の偉大な例を追加するためにどのような洞察を与えますPHPはその枠組みの中でやっています。
この例では、foo()関数内の$bar
が関数スコープ変数への静的参照であることがわかります。
設定解除$bar
は、参照を削除しますが、メモリ解放していません:
<?php
function foo()
{
static $bar;
$bar++;
echo "Before unset: $bar, ";
unset($bar);
$bar = 23;
echo "after unset: $bar\n";
}
foo();
foo();
foo();
?>
上の例の出力は以下となります。
Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23
これがいかに難しいかの良い例です。 – dmikam