Существуют ли различия между get_object_vars($obj)
и (array) $obj
?
Оба, похоже, возвращают общедоступные свойства объекта.
Что лучше?
Это не совсем так.
get_object_vars
чувствителен к области видимости и возвращает все видимые свойства, кроме статических свойств, независимо от их вязкости. Если вы вызываете это из-за пределов своего класса, вы будете получать только публичные члены; из производного класса вы получите защищенных и открытых членов; и из самого класса вы получите всех участников. Клавиши массива представляют имена свойств и не искажаются.
Листинг (array)
возвращает, по крайней мере, на PHP 5.3.0 все свойства объекта, общедоступные и другие. Имя свойств искажается в соответствии с уровнем защиты:
public
: не искаженный, идентичный именам свойств protected
: имя ключа для свойства начинается с *
private
: имя ключа для свойства начинается с имени класса Для получения дополнительной информации см. Листинг в массиве .
Надеюсь, вы сможете лучше понять, какой из них наиболее подходит для вашей ситуации.
Функция get_object_vars()
является более четким способом достижения желаемого эффекта. Хотя приведение его в массив также является решением, это поведение может измениться в более поздних версиях PHP.
Я не знаю, существует ли реальная разница между этими двумя методами, но приведенные выше аргументы приведут меня к использованию функции.
Лучше то, что вам действительно нужно. get_object_vars () не показывает закрытых и защищенных членов. См. Этот комментарий в руководстве для примера.