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

陪她去流浪 桃子 编辑 阅读次数:7875

前两天,有群友问了下面这样一个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

文章评论 10 发表评论 登出
  1. yudix

    从十年前的文章得到了网上一堆人的错误的解答,大佬牛皮

    1. 桃紫

      🐮🐮🐮

    2. Le

      从8年前的文章得到知识,太感谢作者了

      1. 桃子

        哈哈,客气。没想到8️⃣年前的文章还能被搜索到🤪

      2. 168

        有收获

        1. 桃子

          嗯嗯,八年了,我竟然没有继续写 PHP 了。

        2. 年华
          谢谢老哥的文章?,可以加我哈哈哈
          1. 桃子
            啊哈,怎么加,加什么??
            1. 年华
              加我微信呀,我们用Email联系呀
              1. 桃子
                回复啦,你可以直接回复我这个邮箱。其实我是能看到的。?
          还没有用户发表过评论,我要发表评论
          编辑评论