別の質問で、PHP 関数呼び出しの結果を括弧で囲むと、次のように結果を本格的な式に変換できることが指摘されました。
<?php
error_reporting(E_ALL | E_STRICT);
function get_array() {
return array();
}
function foo() {
// return reset(get_array());
// ^ error: "Only variables should be passed by reference"
return reset((get_array()));
// ^ OK
}
foo();
ここで何が起こっているのかを明確かつ明確に説明するために、ドキュメントで何かを見つけようとしています。C++ とは異なり、私は PHP の文法とそのステートメント/式の扱いについて、自分で派生させるのに十分な知識がありません。
この動作に関するドキュメントに隠されているものはありますか? そうでない場合、他の誰かが推測に頼らずに説明できますか?
アップデート
私は最初、この EBNFが PHP の文法を表していると主張していることに気づき、スクリプトを自分でデコードしようとしましたが、結局あきらめました。
次に、を使用phc
して 2 つのバリアントの.dot
ファイルを生成し、次のコマンドを使用して両方のスクリプトの AST イメージを生成しました。foo()
$ yum install phc graphviz
$ phc --dump-ast-dot test1.php > test1.dot
$ dot -Tpng test1.dot > test1.png
$ phc --dump-ast-dot test2.php > test2.dot
$ dot -Tpng test2.dot > test2.png
どちらの場合も、結果はまったく同じでした。