0

参照変数の使用を拒否すると宣言されたPHP(5.3ではE_DEPRECATED、5.4ではE_STRICT)。当初は&の使用だと思っていましたが、そうではないようです。

それで、私は疑問に思っていました、参照を使用するどのような種類のコードがまだ許可されていますか、そして今何がE_DEPRECATED / STRICTエラーをスローしますか?

4

2 に答える 2

0

これまでのところ、私が学んだことから、結果は次のとおりです。

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
  1. $othervarはオブジェクト以外のすべてです
  2. SomeObject::foo()オブジェクトの新しいインスタンスを返します。
于 2012-11-07T08:14:41.027 に答える
0
$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 が削除されたため、これを使用すると致命的なエラーが発生します。

したがって、参照渡しと参照による再実行があります(両方とも独自のマニュアルページがあります)

于 2012-11-07T08:24:19.277 に答える