2013-06-04 33 views
0
<?php 
$m->type = 'EVENT'; 
if (empty($m->type)) { 
    var_dump($m->type); 
} 
?> 

這段代碼打印

string(5) "EVENT" 

這怎麼可能?

編輯

的$米對象是一個普通的一個,具有魔__set和__get該存儲值到一個受保護的陣列。

<?php 
$m->type = 'EVENT'; 
if ($m->type == NULL) { 
    var_dump($m->type); 
} 
?> 

上面提到的代碼按預期方式工作(它跳過如果體)。

+0

沒有做到這一點對我來說,我怕(PHP 5.3.24) – andrewsi

+0

你試過將該字符串存儲到一個變量,然後測試它?像這樣:$ string = $ m-> type; if(empty($ string)){// code here} – Tom

+0

嘗試'$ someVar = $ m-> type; if(empty($ someVar))var_dump($ m-> type); }'告訴我們,你得到什麼 –

回答

6

如果您使用的類內吸魔,the docs page記錄了相當棘手的問題:

<?php 
class Registry 
{ 
    protected $_items = array(); 
    public function __set($key, $value) 
    { 
     $this->_items[$key] = $value; 
    } 
    public function __get($key) 
    { 
     if (isset($this->_items[$key])) { 
      return $this->_items[$key]; 
     } else { 
      return null; 
     } 
    } 
} 

$registry = new Registry(); 
$registry->empty = ''; 
$registry->notEmpty = 'not empty'; 

var_dump(empty($registry->notExisting)); // true, so far so good 
var_dump(empty($registry->empty)); // true, so far so good 
var_dump(empty($registry->notEmpty)); // true, .. say what? 
$tmp = $registry->notEmpty; 
var_dump(empty($tmp)); // false as expected 
?> 
+0

我認爲這可能是影響我的代碼。我會檢查出來的。 – brazorf