参照変数の使用を拒否すると宣言されたPHP(5.3ではE_DEPRECATED、5.4ではE_STRICT)。当初は&の使用だと思っていましたが、そうではないようです。
それで、私は疑問に思っていました、参照を使用するどのような種類のコードがまだ許可されていますか、そして今何がE_DEPRECATED / STRICTエラーをスローしますか?
これまでのところ、私が学んだことから、結果は次のとおりです。
function foo(&$somevar) { /* ... */ } // Allowed : pass-by-reference
function &foo($somevar) { /* ... */ } // Allowed : returning-by-reference
$somevar = &othervar; *1 // Allowed
foo(&$somevar); // Refused : call-time pass-by-reference
$somevar = & new SomeObject(); // Refused
$somevar = & SomeObject::foo(); *2 // Refused
SomeObject::foo()
オブジェクトの新しいインスタンスを返します。$somevar = & new SomeObject();
どうしてそうするか?何が起こると思いますか?唯一の答えは、マニュアルを確認することだと思いますか?http://www.php.net/manual/en/language.references.phpを確認してください。特に、そうでない部分 (例: ポインター) を確認してください。
あなたがそこで読むかもしれないことは次のようになります:
参照によって引数を正しく渡すには、関数定義だけで十分です。PHP 5.3.0 以降、foo(&$a); で & を使用すると、「call-time pass-by-reference」は推奨されないという警告が表示されます。また、PHP 5.4.0 以降、call-time pass-by-reference が削除されたため、これを使用すると致命的なエラーが発生します。
したがって、参照渡しと参照による再実行があります(両方とも独自のマニュアルページがあります)