Что касается 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.