PHP empty($ string)返回true但string不为空

时间:2013-06-04 13:19:14

标签: php string

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

这段代码打印

string(5) "EVENT"

这怎么可能?

修改

$ m对象是一个普通的对象,使用magic __set和__get将值存储到受保护的数组中。

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

上面提到的代码按预期工作(它会跳过if主体)。

1 个答案:

答案 0 :(得分:7)

如果你在课堂上使用魔法吸气剂,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
?>