get_object_vars () против приведения к массиву - PullRequest
37 голосов
/ 25 марта 2010

Есть ли различия между get_object_vars($obj) и (array) $obj?

Кажется, что оба возвращают открытые свойства объекта.

Что лучше?

Ответы [ 3 ]

48 голосов
/ 25 марта 2010

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

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

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

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

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

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

2 голосов
/ 25 марта 2010

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

2 голосов
/ 25 марта 2010

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

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

...