Определение, является ли свойство объекта пустым

Я чувствую, что здесь что-то не хватает. Я уже давно использовал 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 должен иметь значение (5) в свойстве номера. Как вы, возможно, догадались, проблема в том, что php перекликается с "пустым". Но это не!!!

Однако он работает, если я сохраняю свойство в переменной, а затем оцениваю его.

Итак, что было бы лучшим способом определить, является ли свойство объекта пустым? Спасибо.

Ответ 1

Вам нужно реализовать __ isset() магический метод.

__ isset() запускается вызовом isset() или empty() для недоступных свойств.

public function __isset($property){
    return isset($this->$property);
} 

Ответ 2

Проверьте, есть ли возвращаемое значение null. Должен дать вам правильный ответ.

Ответ 3

if (empty(($person->number)))

/* OR */

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

Помещение() вокруг значения Object- > Property заставит его оценивать до вызова пустого.