get_object_vars () по сравнению с броском для выстраивания

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

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

Который лучше?

37
задан hakre 9 July 2011 в 09:35
поделиться

3 ответа

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

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

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

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

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

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

48
ответ дан 27 November 2019 в 04:52
поделиться

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

2
ответ дан 27 November 2019 в 04:52
поделиться

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

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

2
ответ дан 27 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: