2012-01-27 9 views
11

私は以下のコードを持っています。私は値をつけて再び使用するために$ bを変更したい。私がそうするなら、それは$ aも変えます。以前に$ aへの参照として割り当てた後に、$ bに値を再度割り当てることはできますか?PHPは変数から "reference"を削除します。

$a = 1; 
$b = &$a; 

// later 
$b = null; 

答えて

12

参照の説明をインライン

$a = 1;
$b = &$a;今$ bと$ aは2つの異なる名前の同じ変数になります
unset($b); $ b名前はなくなりましたが、文脈から消えましたが、$ aは依然として利用可能です。
$b = 2; $ bは新しい値を持つ新しい変数と同じです。新しい人生を始める。

7
$a = 1; 
$b = &$a; 

unset($b); 
// later 
$b = null; 
3

まず:$bから$aからの参照を作成する2つの変数の間(よりよい単語の欠乏のために)接続を作成し、その$b変更はまさにそれがある方法ですとき$aを変更働くことを意味する。

だから、あなたが参照を壊したいと仮定すると、IST

unset($b); 
$b="new value"; 
5

最も簡単な方法は、@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 
+0

これがいかに難しいかの良い例です。 – dmikam

関連する問題