phpリファレンスの戻りとリファレンスの取り消しの詳細

1903 ワード

一、参照戻り参照は、関数で参照がどの変数にバインドされるべきかを見つけたい場合に返されます.リターンリファレンスでパフォーマンスを向上させないでください.エンジンは自分で最適化するのに十分です.合理的な技術的理由がある場合にのみ参照を返します.参照を返すには、次の構文を使用します.
 
  
class foo {
    public $value = 42;
    public function &getValue() {
        return $this->value;
    }
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;                // prints the new value of $obj->value, i.e. 2.
?>

以上はPHP Manualが与えた解釈で、よく理解していることを示しています.
 
  
    function &test(){
     static $b = 0;  //
     $b = $b+1;
     echo $b."
";
     return $b;
    }
   $a = test();  // $b :1
   $a = 5;
   $a = test();  // $b :2

   $a = &test();  // $b :3  ** **
   $a = 5;    //$b 5
   $a = test();  // $b :6  ** **
   ?>

$a=test()は関数定義の場合、戻り方を参照すると言いますが、このような一般的な情勢で関数を呼び出すと、その役割も一般的な関数と同じなので、結果は1、2です
$a=&test()という呼び出し方は、$a=&$bに似ています.そして、2番目の文は、変数$b=5に等しい$a=5を返します.それは、変数$b=5に等しいことです.最後の文で得られた6も簡単に理解できます.
パラメータ伝達とは異なり、ここでは2つの場所で&記号を使用する必要があります.通常のコピーではなく、参照が返されることを示します.また、$aは通常の付与ではなく、参照のバインドとして示されます.
Note:関数から参照を返す場合:return($this->value);これは、参照された変数ではなく式の結果を戻そうとするため、機能しません.関数から参照変数を返すしかない――他に方法はない.コードが動的式またはnew演算子の結果を戻そうとすると、PHP 4.4.0およびPHP 5.1.0からE_が発行されます.NOTICEエラー.
二、参照を取り消すunsetが参照する場合、変数名と変数内容の間のバインドが切断されただけです.これは、変数の内容が破棄されたという意味ではありません.例:
 
  
$a = 1;
$b =& $a;
unset($a);
?>

unset$bはありません.$aだけです.
Unixのunlink呼び出しと比較すると理解に役立つかもしれません.