PHP: get_class_vars() vs. get_object_vars()

Что касается PHP, каковы различия между ними:

  • get_class_vars()
  • get_object_vars()

Ответ 1

get_class_vars() принимает имя_класса get_object_vars() принимает переменную $object

Оба они работают одинаково:

get_class_vars() будет раскрывать общедоступные переменные по умолчанию (или private/protected, если они вызваны в классе) get_object_vars() будет отображать текущие общедоступные переменные (или private/protected, если они вызваны внутри объекта класса)

Не будет выставлять методы.

Ответ 2

Как вы можете видеть из 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)
}
*/

Ответ 3

Это еще одна вещь:

get_object_vars() не видит статические переменные, но видит vars, созданные во время выполнения!
get_class_vars() ВИДЕТЬ статические, но НЕ видит новые переменные, созданные во время выполнения, например. в конструкторе:

public function __construct() {$this->newval = "newval";}

Ответ 4

Начиная с 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 не будет изменен.

Ответ 5

get_class_vars() дает вам даже нестатические переменные, но их значения берутся во время создания объекта, например. значения init.