改变函数调用结果语义的括号
在另一个问题中指出,将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
生成两个变体的文件,我使用以下命令为两个脚本生成 AST 图像:.dot
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
在这两种情况下,结果完全相同: