2012-04-21 128 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