PHP: 不能以变量函数的形式调用eval:Undefined function eval()

陪她去流浪 桃子 2015年09月10日 编辑 阅读次数:7673

前两天,有群友问了下面这样一个PHP的问题:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 为什么这段代码可以运行
// 正常输出: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语法构造的一部分,并不是一个函数,所以不能通过 变量函数 的形式来调用(虽然她确实像极了函数原型)。这样的语法构造还包括:echoprintunset()isset()empty()includerequire,...

再比如 print,你可以 print "hello"。但你自己的函数可以 MyPrint "hello" 吗?显然不可能。 print 也是语法构造的一部分,是语言的设计者规定了你可以这样用它。而你自己的函数却不可以这样写:你不可以自创语法。除非你自己新发明一种语言,😄。

参考链接

标签:php