empty()和isset()如何避免未定义变量的警告?

Bla*_*her 6 php function

我知道按值传递,按引用传递等概念。因此,我理解为什么未定义参数时显式定义的函数会发出警告。

但是,如果empty()和isset()是函数,那么为什么在传递未定义的变量时为什么不发出警告?这里有什么特别的魔术吗?我该如何复制?

Nar*_*arf 5

empty()并且isset()实际上不是函数。

它们是语言内置的关键字,并由编译器执行,这就是所讨论的行为是如何可能的 - 编译器(与运行时引擎不同,在其中执行常规函数)已经知道变量是否存在。

作为一个副作用,这就是为什么在PHP 5中,你不能定义类的方法命名empty()isset()list(),等你仍然无法通过声明类或常量const使用相同的名称。

其他一些语言将此作为称为fexpr的功能提供。

  • @Black 实际上所有运算符也返回值,这不是标准。语法看起来很像函数调用,但这真的无关紧要。没有什么可以规定运算符在语法上必须看起来像什么。 (2认同)