2

それはなぜですか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
4

4 に答える 4

2

$obj->foo()['bar'];PHP >= 5.4.0 で有効です

$obj->foo()->['bar']必要なものを追加しても、どのバージョンでも有効ではありません;

そのため、5.4.0 より前のバージョンでは、最初の行で解析エラーが発生し、実行が停止し、次の行で解析エラーが表示されません。

バージョン 5.4.0 以降では、最初の行は機能しますが、2 行目で解析エラーが発生します。したがって、それらを逆にすると$obj->foo()->['bar']、どのバージョンでも常に解析エラーが発生します。

于 2013-11-15T00:12:07.440 に答える
2

$obj->foo()->['bar']は、どの PHP バージョンでも有効ではありませんでした。ここを参照してください

のような構文と間違えたのかもしれません$obj->foo()->{'bar'}ここを参照してください

$obj->foo()['bar']は PHP >= 5.4.0 以降で有効です。ここを参照してください

于 2013-11-15T00:16:58.943 に答える
0

あなたの最初の例は決して有効ではありませんでした。

$obj->foo()->['bar']; // is invalid in any PHP implementation 

ただし、メソッドチェーンのサポートがある場合:プロパティ$obj->foo()を持つオブジェクトを返す場合、これは機能します:bar

$obj->foo()->bar;
于 2013-11-15T00:12:08.747 に答える
0

へのサポート

$obj->foo()['bar'];

関数配列の逆参照のサポートがそのバージョンからのみ追加されたため、PHP 5.4.0 で導入されました。

この便利なページで説明しています: https://wiki.php.net/rfc/functionarraydereferencing

于 2013-11-15T00:15:24.680 に答える