Как я могу проверить, является ли объект PHP пустым (т.е. не имеет свойств)? Встроенный empty()
не работает над объектами в соответствии с документом:
5.0.0 Objects with no properties are no longer considered empty.
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
не возвращается в списке.
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