変数ハンドリング機構の変更


PHP7 バージョンでは、変数解析メカニズムが調整されました。調整内容は次のとおりです:

1. 間接変数、属性、メソッド参照は左から右に解釈されます:

 $$foo['bar']['baz'] // interpreted as ($$foo)['bar']['baz']
 $foo->$bar['baz']   // interpreted as ($foo->$bar)['baz']
 $foo->$bar['baz']() // interpreted as ($foo->$bar)['baz']()
 Foo::$bar['baz']()  // interpreted as (Foo::$bar)['baz']()

説明の順序を変更したい場合は、中括弧を使用できます:

${$foo['bar']['baz']}
$foo->{$bar['baz']}
$foo->{$bar['baz']}()
Foo::{$bar['baz']}()

2. 現在、グローバル キーワードは単純な変数のみを参照できます

global $$foo->bar;    // 这种写法不支持。
global ${$foo->bar};  // 需用大括号来达到效果。

3. 括弧を使用して、変数や関数を囲むことは役に立ちません。

function getArray() { return [1, 2, 3]; }
$last = array_pop(getArray());
// Strict Standards: Only variables should be passed by reference
$last = array_pop((getArray()));
// Strict Standards: Only variables should be passed by reference
2 番目の文の呼び出しは括弧で囲まれていますが、この厳密なエラーは引き続き報告されることに注意してください。以前のバージョンの PHP では、このエラーは報告されません。

4. 参照代入時に自動作成される配列要素やオブジェクト属性の順序が以前と異なります。

うわー