phpにおける関数の前付け&記号の役割分解

1451 ワード

php変数の前に&記号をつけるのはどういう意味かは言うまでもなく、みんな使っています.2つの変数が同時に1つのアドレスを指しているだけです.では、php関数の前に&記号をつける意味は何ですか.次に、2つのプレゼンテーションコードを先に行ってから説明します.

function &chhua() 
{ 
static $b="www.jb51.net";//         
$b=$b."WEB  "; 
echo $b; 
return $b; 
} 
 
$a=chhua();//        $b    “www.jb51.netWEB  ” 
$a="PHP"; 
echo "
"; $a=chhua();//  $b   “www.jb51.netWEB WEB ” echo "
"; $a=&chhua();//  $b   “www.jb51.netWEB WEB WEB ” echo "
"; $a="JS"; $a=chhua(); //  $b   "JSWEB " 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; $a=test(); //  $b   6

2番目の関数について説明しましょう.このようにして$a=test();得られたのは実は関数の参照が返すのではなく、これは普通の関数呼び出しと変わらない.
原因:これはPHPの規定php規定が$a=&test();方式で得られるのが関数の参照戻りである.
リファレンスリターンとは何か(PHPマニュアルでは、リファレンスリターンは、関数でリファレンスがどの変数にバインドされるべきかを見つけたい場合に使用されます.)
上記の例で説明すると、$a=test()方式で関数を呼び出すのは、関数の値を$aに割り当てるだけであり、$aは関数の$bに影響を及ぼさず、$a=&test()方式は関数を呼び出して、彼の作用はreturn$bの中の$b変数のメモリアドレスと$a変数のメモリアドレスを同じ場所に指して、つまりこのような効果を生みました($a=&b;)したがって、$aの値を変更し、同時に$bの値を変更するので、$a=&test();$a=5を実行した後、$bの値は5になる.