2012-04-21 97 views
3

下面的代码(#1):PHP空()奇怪的行为

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; 
    } 
} 

发生了什么?

+0

正在显示的错误是否已开启? – Jasper 2012-04-21 14:38:47

+0

是的,他们打开了! – Dyin 2012-04-21 14:39:13

回答

7

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

+0

是的。在使用'empty()'之前,只需将'getCollection()'的返回值存储在一个变量中。 PHP病了。 – Dyin 2012-04-21 14:43:05

+1

@Dyin * PHP生病了。* - 我完全同意。 ;) – Crozin 2012-04-21 14:44:27

2

php.net

empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).

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

3

你不能使用empty()与变量以外的任何东西(这意味着也没有函数调用)。

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

你必须有你的错误显示关闭,如下所示:

<?php 

class Bar { 
     function foo() { 
     } 
} 

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

给人

PHP Fatal error: Can't use method return value in write context in D:\cw\home\andreas\test\empty.php on line 9

Fatal error: Can't use method return value in write context in D:\cw\home\andreas\test\empty.php on line 9

在我的本地。

尝试这样做之前,你var_dumpini_set('display_errors', true),看看错误消息的突然出现

+0

正如你所提到的,厌倦了设置'display_errors'。仍然没有输出。顺便说一句,从别处得到致命的错误。在XAMPP中使用PHP 5.3.8。 – Dyin 2012-04-21 14:46:06

+0

@Dyin嗯,还可以尝试'ini_set('error_reporting',E_ALL)'与'display_errors',看看是否有帮助 – 2012-04-21 14:47:58

+0

没有变化,没有输出。 ;) – Dyin 2012-04-21 14:52:18