在另一个问题中,有人指出,将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生成.dot以下两个文件的文件foo(),我使用以下命令为两个脚本生成了 AST图像:
$ 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
Qyouu
忽然笑
Smart猫小萌