property_exists
вернет true, если свойство существует, независимо от области действия свойства и вызывающей стороны.
get_class_vars
вернет все свойства, доступные из текущей области, вместе с их статическими значениями или значениями по умолчанию (для свойств, которые не объявлены статическими) . Однако он не будет возвращать свойства, которые не были объявлены в теле класса, и не будет принимать аргумент объекта.
Обратите внимание, что property_exists
также вернет false, если свойство, которое не объявлено в теле класса (т.е. контекст объекта), запрашивается с использованием имени класса.
За пример:
class Foo {
public $foo;
private $bar;
public function test() {
var_dump(get_class_vars(__CLASS__));
}
}
$obj = new Foo;
$obj->baz = 'hello';
property_exists($obj, 'bar'); // true
property_exists($obj, 'baz'); // true
property_exists(get_class($obj), 'baz'); // false
get_class_vars(get_class($obj)); // you get "foo" only
$obj->test(); // you get "foo" and "bar", not "baz"