php function定義時の関数名に&記号を付ける意味

2738 ワード

たくさんの招待状を见て、しかしすべて理解することができなくて、また多くの资料を见て、ついに名が明らかになりました.メモをとる
質問:phpは関数を宣言する時、関数名の前の&記号は何の役に立ちますか?
ずっと納得できなかった.多くの投稿は変数の$a=&$bに似ていると言っていますが、$bは宣言するときに前に&記号をつけていませんか?では、この関数名の前に&を付けると何の役に立ちますか?
多くの人が見ているのはネット上の例ですが、まずネット上の例を使ってみてください.function   &test(){      static   $b   = 0;   //      $b   $b +1;      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の参照ですか.では続きますfunction   &test(){      static   $b   = 0;   //      $b   $b +1;      return   $b ;      }     $a   = test();    //  $b  :1     $a   = 5;     $a   = test();      //  $b  :2          $a   = &test();   //  $b  :3      echo $a;       // $b 3  
すなわち、$aがtest関数の参照である場合、echo$aは再び関数を呼び出し、$bの値は再び1を加算する.
しかし、$aの値は変化する、すなわち、$aはtest関数が返す値の参照、すなわち$bの参照を保持する.だから$a=&$bに相当する.
そのため、関数の結果への参照を実現するには、次の手順に従います.
1.引用を付与するときはtestの前に&
2.宣言時に関数名を&と付け、関数の実行結果を返す参照を表す
3.同時に関数には戻り値が必要で、くだらない話、戻り値がないのは誰を引用しますか?
曖昧さのない例を挙げます.
function &abc($n){
  $arr=array('aaa','bbb','ccc');
return$arr[$n];//配列の2番目の要素を返す
}
$tem=&abc(1);//ここでは配列の2番目の要素の参照しか得られません.2番目の要素のみが返されるためです.
$tem='ddd';//配列の2番目の要素の値を「ddd」に変更
もっと理解しやすいのではないでしょうか.
この特徴は一般的に大きな文字列など、比較的空間を占める値を返すために使われていますが、phpの書き込み時に特徴をコピーするため、このテクニックは一般的にあまり使われていません.
しかし、関数の演算結果を即時に修正する必要がある場合は、このテクニックを使用することができます.