関数のパラメーターの前に&を使用すると、参照によって渡され、出力に使用できることを意味しますが、別のコンテキストで使用するとどうなりますか?
例えば:
function foo (&$param) {
$param = 3;
}
foo (&$a);
echo $a;
何が起こるかを確認するためだけにfooを呼び出すときに&を追加しましたが、実際には何も変更されていないようで、その時点までに$aも定義されていません。
誰か説明してもらえますか?
関数のパラメーターの前に&を使用すると、参照によって渡され、出力に使用できることを意味しますが、別のコンテキストで使用するとどうなりますか?
例えば:
function foo (&$param) {
$param = 3;
}
foo (&$a);
echo $a;
何が起こるかを確認するためだけにfooを呼び出すときに&を追加しましたが、実際には何も変更されていないようで、その時点までに$aも定義されていません。
誰か説明してもらえますか?
マニュアルには次のように書かれています。
注: 関数呼び出しには参照記号はありません。関数定義のみです。参照によって引数を正しく渡すには、関数定義だけで十分です。PHP 5.3.0 の時点で、 を使用すると、「call-time pass-by-reference」は非推奨であるという警告が表示され
&
ますfoo(&$a);
。
これに加えて、5.4.0 以降では実際に解析エラーが発生します。それ以前は動作しますが、5.3以降は文句を言うでしょう。呼び出し時の参照渡しを実際に必要とするネイティブ関数がいくつかあるため (たとえばととdebug_zval_dump()
の下)、5.4 のこの側面はひどく低下します。call_user_func()
call_user_func_array()
関数で使用する&$param
と、参照渡しを意味します。ただし、関数呼び出しでは使用しないでください。現在のバージョンの PHP では、警告が生成されます。関数呼び出しは現在、変数を渡すことのみが許可されています。関数宣言は、関数が引数を参照または受け渡しのどちらで受け入れるかを示す必要があります。
functionName($variableName);
ではなく、ドキュメントに従って渡しますfunctionName(&$variableName)
パラメーターを指定して呼び出された関数は&$
、警告を生成するようになりました。これは抑制できますが、呼び出し方法としてはまだ価値がありません。
以下のコードをよく考えてください。これはあなたの質問には答えないかもしれませんが、参照される変数を理解するための良い例です。
<?
$variable="this is some test";
$refvariable = &$variable;
$nvariable = $variable;
$variable ="This IS ANOTHER VARIABLE STRING";
echo "Referenced Variable=".$refvariable;
echo "<bR>Normal Variable=".$nvariable;
?> 簡単に言えば、$nvariable の上が通常の変数で、エコーされると、最初に設定された $variable の値を取ります。ここで、参照変数である $refvariable を考えます。これは、$variable の最新の値を取ります。上記の例が理解に役立つことを願っています。