4
$user = new User(1);

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

// output string(2) "77" empty

那么为什么true即使$uservar 不为空,empty() 也会返回呢?

我的用户类的相关部分:

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

这导致我遇到另一个问题:当调用empty()我的非空 varempty($user->ID)时,它会返回 false,但是当使用isset($user->ID)声明为空的 var(例如$user->ID = '')时,它也会返回 false,因为isset()__isset()在类内部调用,对吗?

有没有办法解决这种行为?PHP 指出,我应该将重载的属性复制到一个局部变量中,这对我来说似乎是太多的文书工作;)

4

3 回答 3

9

empty()不叫__get()。您需要实施__isset().

于 2013-04-04T14:24:05.500 回答
2

引用手册

注意

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

于 2013-04-04T14:25:28.653 回答
2

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

于 2013-04-04T14:29:16.393 回答