Что касается PHP, каковы различия между ними:
- get_class_vars()
- get_object_vars()
Что касается PHP, каковы различия между ними:
get_class_vars() принимает имя_класса
get_object_vars() принимает переменную $object
Оба они работают одинаково:
get_class_vars() будет раскрывать общедоступные переменные по умолчанию (или private/protected, если они вызваны в классе)
get_object_vars() будет отображать текущие общедоступные переменные (или private/protected, если они вызваны внутри объекта класса)
Не будет выставлять методы.
Как вы можете видеть из get_class_vars и get_object_vars, get_class_vars получает значения по умолчанию для свойств класса, а get_object_vars получает текущие значения свойств объекта.
Кроме того, get_class_vars принимает строку (то есть имя класса), тогда как get_object_vars принимает объект.
class Example
{
public $var = 123;
}
$e = new Example();
$e->var = 456;
var_dump(get_class_vars("Example"));
/*
array(1) {
["var"]=>
int(123)
}
*/
var_dump(get_object_vars($e));
/*
array(1) {
["var"]=>
int(456)
}
*/
Это еще одна вещь:
get_object_vars() не видит статические переменные, но видит vars, созданные во время выполнения! get_class_vars() ВИДЕТЬ статические, но НЕ видит новые переменные, созданные во время выполнения, например. в конструкторе:
public function __construct() {$this->newval = "newval";}
Начиная с PHP 5.5.9
Я заметил, что на самом деле существует небольшая разница между get_class_vars и get_object_vars.
Относительно Отчет об ошибках PHP, и я сам его тестировал.
Оба метода возвращают один и тот же результат. НО, вы можете управлять свойствами объекта, используя get_object_vars, а не с get_class_vars.
Рассмотрим следующий пример:
class Foo
{
public $bar = null;
public function __construct() {
$this->bar = new DateTime(); // Now
$this->far = &$this->bar;
}
}
$foo = new Foo();
var_dump($foo);
$vars = get_object_vars($foo);
$vars['bar'] = new DateTime('2014-03-25');
var_dump($foo);
В приведенном выше примере вы заметите, что второй
var_dumpбудет имеют$foo->barизменены.Примечание. Если вы попытаетесь изменить метод с
get_object_varsнаget_class_vars, вы также заметите, что$foo->barне будет изменен.
get_class_vars() дает вам даже нестатические переменные, но их значения берутся во время создания объекта, например. значения init.