Как проверить Если объект пуст?

Как я могу проверить, является ли объект PHP пустым (т.е. не имеет свойств)? Встроенный empty() не работает над объектами в соответствии с документом:

 5.0.0 Objects with no properties are no longer considered empty. 

ReflectionClass :: GetProperties

http://www.php.net/manual/en/reflectionclass.getproperties.php

 class A { public $p1 = 1; protected $p2 = 2; private $p3 = 3; } $a = new A(); $a->newProp = '1'; $ref = new ReflectionClass($a); $props = $ref->getProperties(); // now you can use $props with empty echo empty($props); print_r($props); /* output: Array ( [0] => ReflectionProperty Object ( [name] => p1 [class] => A ) [1] => ReflectionProperty Object ( [name] => p2 [class] => A ) [2] => ReflectionProperty Object ( [name] => p3 [class] => A ) ) */ 

Обратите внимание, что newProp не возвращается в списке.

get_object_vars

http://php.net/manual/en/function.get-object-vars.php

Использование get_object_vars будет возвращать newProp , но защищенные и закрытые члены не будут возвращены.


Таким образом, в зависимости от ваших потребностей может быть гарантирована комбинация отражения и get_object_vars.

Вот решение :;

 $reflect = new ReflectionClass($theclass); $properties = $reflect->getProperties(); if(empty($properties)) { //Empty Object } 

Можете ли вы уточнить это с помощью некоторого кода? Я не понимаю, чего вы пытаетесь достичь.

Вы могли бы вызвать функцию на объекте следующим образом:

 public function IsEmpty() { return ($this->prop1 == null && $this->prop2 == null && $this->prop3 == null); } 

Я считаю (не совсем уверен), что вы можете переопределить функцию isset для объектов. В классе вы можете обеспечить реализацию __isset() и вернуть его соответствующим свойствам.

Попробуйте прочитать это: http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members