在另一个问题中指出,在括号中包装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();
Run Code Online (Sandbox Code Playgroud)
我试图在文档中找到任何内容,以明确无误地解释这里发生的事情.与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 …Run Code Online (Sandbox Code Playgroud) 看看这段代码:
$last = end($p = explode('/', $someString));
Run Code Online (Sandbox Code Playgroud)
得到这个通知:
只应通过引用传递变量
我真的很困惑,因为它$p是一个变量.