PHP empty()奇怪的行为

时间:2012-04-21 14:35:37

标签: php

以下代码(#1):

var_dump($myObject->getBook()->getCollection());
$testArray=Array();
var_dump($testArray);
var_dump(empty($testArray));

...将输出:

array(0) { } array(0) { } bool(true)

以下代码(#2):

var_dump($myObject->getBook()->getCollection());
$testArray=Array();
var_dump($testArray);
var_dump(empty($myObject->getBook()->getCollection()));

...将输出:

无。没有错误,没有单个字符。没什么。

class Book{
  protected $bidArray=Array();
  public function getCollection(){
    return $this->bidArray;
  }
}

那里发生了什么?

4 个答案:

答案 0 :(得分:7)

empty() 不是一个函数,虽然它看起来像一个函数。它只是一种特殊的语法,只能 与变量一起工作,例如empty($abc)。您根本无法使用empty(123)empty($obj->getSth())等表达式。

答案 1 :(得分:3)

你不能将empty()与变量以外的任何东西一起使用(也就是说没有函数调用)。

var_dump(empty($myObject->getBook()->getCollection()));

您必须关闭错误显示,如下所示:

<?php

class Bar {
        function foo() {
        }
}

$B = new Bar();
empty($B->foo());

给出

  

PHP致命错误:无法在第9行的D:\ cw \ home \ andreas \ test \ empty.php中的写入上下文中使用方法返回值

     

致命错误:第9行的D:\ cw \ home \ andreas \ test \ empty.php中的写入上下文中不能使用方法返回值

在我当地。

尝试在ini_set('display_errors', true)之前执行var_dump,看看是否出现错误消息

答案 2 :(得分:2)

php.net

相同
  

empty()仅检查变量,因为其他任何内容都会导致解析   错误。换句话说,以下内容不起作用:   空(修整($名))。

这是因为empty()不是一个函数,而是一个语言结构,因此仅限于此行为。

答案 3 :(得分:2)

使用empty()不能直接检查方法的返回值。更多信息:Can't use method return value in write context