Я чувствую, что здесь что-то не хватает. Я довольно давно использовал функцию empty()
PHP в определении того, является ли переменная пустой. Я хотел использовать его, чтобы определить, является ли свойство объекта пустым, но каким-то образом оно не работает. Вот упрощенный класс, иллюстрирующий проблему
// 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 перекликается с «пустым». Но это не так !!!
Однако он работает, если я сохраняю свойство в переменной, а затем оцениваю его.
Итак, что было бы лучшим способом определить, является ли свойство объекта пустым? Спасибо.
Вам нужно реализовать магический метод __isset () .
__isset () запускается вызовом isset () или empty () для недоступных свойств.
public function __isset($property){ return isset($this->$property); }
Проверьте, является ли возвращаемое значение null
. Должен дать вам правильный ответ.
if (empty(($person->number))) /* OR */ if (!isset($person->nothing) || empty(($person->nothing)))
Помещение () вокруг значения Object-> Property заставит его оценивать до вызова пустого.