それはなぜですかPHP 5.3.8
:
$obj->foo()['bar']; // syntax error
$obj->foo()->['bar']; // valid
しかし、PHP 5.4.9
それは逆です:
$obj->foo()['bar']; // valid
$obj->foo()->['bar'] // syntax error
それはなぜですかPHP 5.3.8
:
$obj->foo()['bar']; // syntax error
$obj->foo()->['bar']; // valid
しかし、PHP 5.4.9
それは逆です:
$obj->foo()['bar']; // valid
$obj->foo()->['bar'] // syntax error
$obj->foo()['bar'];
PHP >= 5.4.0 で有効です
$obj->foo()->['bar']
必要なものを追加しても、どのバージョンでも有効ではありません;
そのため、5.4.0 より前のバージョンでは、最初の行で解析エラーが発生し、実行が停止し、次の行で解析エラーが表示されません。
バージョン 5.4.0 以降では、最初の行は機能しますが、2 行目で解析エラーが発生します。したがって、それらを逆にすると$obj->foo()->['bar']
、どのバージョンでも常に解析エラーが発生します。
例$obj->foo()->['bar']
は、どの PHP バージョンでも有効ではありませんでした。ここを参照してください。
のような構文と間違えたのかもしれません$obj->foo()->{'bar'}
。ここを参照してください。
例$obj->foo()['bar']
は PHP >= 5.4.0 以降で有効です。ここを参照してください。
あなたの最初の例は決して有効ではありませんでした。
$obj->foo()->['bar']; // is invalid in any PHP implementation
ただし、メソッドチェーンのサポートがある場合:プロパティ$obj->foo()
を持つオブジェクトを返す場合、これは機能します:bar
$obj->foo()->bar;
へのサポート
$obj->foo()['bar'];
関数配列の逆参照のサポートがそのバージョンからのみ追加されたため、PHP 5.4.0 で導入されました。
この便利なページで説明しています: https://wiki.php.net/rfc/functionarraydereferencing