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