15

我觉得我在这里遗漏了一些东西。我一直在使用 PHP 的empty()函数来确定变量是否为空。我想用它来确定一个对象的属性是否为空,但不知何故它不起作用。这是一个简化的类来说明问题

// The Class 
class Person{
    private $number;

    public function __construct($num){
        $this->number = $num;
    }

    // this the returns value, even though its a private member
    public function __get($property){
        return intval($this->$property);
    }
}

// The Code    
$person = new Person(5);

if (empty($person->number)){
    echo "its empty";
} else {
    echo "its not empty";
}

所以基本上,$person对象的 number 属性应该有一个值 (5)。正如您可能已经猜到的那样,问题在于 php 回显“它是空的”。但不是!!!

但是,如果我将属性存储在变量中,然后评估它,它确实有效。

那么确定对象属性是否为空的最佳方法是什么?谢谢你。

4

3 回答 3

25

您需要实现__isset()魔术方法。

__isset() 通过在不可访问的属性上调用 isset() 或 empty() 来触发。

public function __isset($property){
    return isset($this->$property);
} 
于 2012-08-02T03:22:38.393 回答
4
if (empty(($person->number)))

/* OR */

if (!isset($person->nothing) || empty(($person->nothing)))

将 () 放在 Object->Property 值周围将强制在调用空之前对其进行评估。

于 2016-05-19T20:32:22.227 回答
1

检查返回值是否null相反。应该给你正确的答案。

于 2012-08-02T03:21:18.393 回答