前两天,有群友问了下面这样一个PHP的问题:
1 2 3 4 5 6 7 8 9 10 11 |
|
因为PHP支持变量函数(variable-functions)
:通过变量保存一个函数的名字,然后在其后附上一对小括号的形式即可完成对函数的调用。但为什么当 被调用对象 为 eval
的时候就不行了呢?
参考PHP官方文档可知:eval
属于PHP语法构造的一部分,并不是一个函数,所以不能通过 变量函数 的形式来调用(虽然她确实像极了函数原型)。这样的语法构造还包括:echo
,print
,unset()
,isset()
,empty()
,include
,require
,...
再比如 print
,你可以 print "hello"
。但你自己的函数可以 MyPrint "hello"
吗?显然不可能。
print
也是语法构造的一部分,是语言的设计者规定了你可以这样用它。而你自己的函数却不可以这样写:你不可以自创语法。除非你自己新发明一种语言,😄。