为什么empty()在接受getter输出时不接受函数返回值?

时间:2015-01-15 09:52:24

标签: php

我有一个实现ArrayAccess接口的类。我注意到我可以在偏移值上使用empty函数而没有错误:

$class = new MyArrayClass();
if(!empty($class["offset"])) 
   ...
else
   die("Empty!!!");

然而,甚至调用offsetGet接口方法都不起作用:

if(!empty($class->offsetGet("offset"))) 

抛出标准错误:

  

无法在写入上下文中使用函数返回值。

我的问题是:为什么empty适用于gettersvirtual array offsets?据我所知,它们实际上是函数返回值,而不是变量......

这个问题相当具有教育性和实用性。我只是好奇。请尽量解释。

1 个答案:

答案 0 :(得分:1)

php版本小于5.5的

empty仅接受变量。

来自changelog的

  

5.5.0 empty()现在支持表达式,而不仅仅是变量。