Подтвердить что ты не робот

Get_object_vars() против переноса в массив

Существуют ли различия между get_object_vars($obj) и (array) $obj?

Оба, кажется, возвращают общедоступные свойства объекта.

Что лучше?

4b9b3361

Ответ 1

Это не совсем так.

get_object_vars чувствителен к области видимости и возвращает все видимые свойства, кроме статических свойств, независимо от их вязкости. Если вы вызываете это из-за пределов своего класса, вы будете получать только публичные члены; из производного класса вы получите защищенных и открытых членов; и из самого класса вы получите всех участников. Ключи массива представляют имена свойств и не искажаются.

Приведение (array) возвращает, по крайней мере, на PHP 5.3.0, все свойства объекта, общедоступные и другие. Имя свойств искажается в соответствии с уровнем защиты:

  • public: не искажен, идентичен именам свойств
  • protected: имя ключа для свойства начинается с *
  • private: имя ключа для свойства начинается с имени класса

Для получения дополнительной информации см. литье в массив.

Надеюсь, вы сможете лучше понять, какой из них наиболее подходит для вашей ситуации.

Ответ 2

Функция get_object_vars() - более четкий способ достижения желаемого эффекта. Хотя приведение его в массив также является решением, это поведение может измениться в более поздних версиях PHP.

Я не знаю, существует ли реальная разница между этими двумя методами, но приведенные выше аргументы приведут меня к использованию функции.

Ответ 3

Лучше то, что вам действительно нужно. get_object_vars() не показывает закрытых и защищенных членов. См. этот комментарий в руководстве для примера.