前两天,有群友问了下面这样一个PHP的问题:
// 为什么这段代码可以运行
// 正常输出:howdy~
$foo = "system";
$bar = "echo howdy~";
$foo($bar);
// 而这段代码却不能运行
// PHP错误是:``PHP Fatal error: Call to undefined function eval() in - on line ?``
$foo = "eval";
$bar = "echo howdy~";
$foo($bar);
因为PHP支持变量函数(variable-functions)
:通过变量保存一个函数的名字,然后在其后附上一对小括号的形式即可完成对函数的调用。但为什么当 被调用对象 为 eval
的时候就不行了呢?
参考PHP官方文档可知:eval
属于PHP语法构造的一部分,并不是一个函数,所以不能通过 变量函数 的形式来调用(虽然她确实像极了函数原型)。这样的语法构造还包括:echo
,print
,unset()
,isset()
,empty()
,include
,require
,...
再比如 print
,你可以 print "hello"
。但你自己的函数可以 MyPrint "hello"
吗?显然不可能。
print
也是语法构造的一部分,是语言的设计者规定了你可以这样用它。而你自己的函数却不可以这样写:你不可以自创语法。除非你自己新发明一种语言,😄。
参考链接
这篇文章的内容已被作者标记为“过时”/“需要更新”/“不具参考意义”。