empty()返回错误的结果

时间:2013-04-04 14:21:13

标签: php

$user = new User(1);

var_dump($user->ID);
if (empty($user->ID))
    echo "empty";

// output string(2) "77" empty

那么,即使true var不为空,为什么empty()返回$user呢?

我的用户类的相关部分:

class User {
    protected $data = null;

    public function __construct($userID) {
        // sql select
        $this->data = $sqlResult;
    }

    // ...

    public function __get($name) {
        if (isset($this->data[$name]))
            return $this->data[$name];
        else
            return null;
    }

}

更新

所以我更新了我的User类并添加了__isset()方法

public function __isset($name) {
        if (isset($this->data[$name]) && !empty($this->data[$name]))
                return true;
        else
                return false;
}

这引出了另一个问题: 在我的非空var empty()上调用empty($user->ID)时,它将返回false,但在声明的var为空时使用isset($user->ID)(例如$user->ID = '')时,它也会返回false ,因为isset()会在课堂内调用__isset(),对吗?

有没有办法解决这个问题? PHP注意到,我应该将重载的属性复制到一个局部变量中,这对我来说似乎太多文书工作了;)

3 个答案:

答案 0 :(得分:9)

empty()不会致电__get()。您需要实施__isset()

答案 1 :(得分:2)

引用manual

  

注意

     

在isset()之外的其他语言结构中不能使用重载属性。这意味着如果在重载属性上调用empty(),则不会调用重载方法。

答案 2 :(得分:2)

根据文档,您应该重载__isset()以使空白工作