2010-03-24 2 views

ответ

41

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

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

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

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

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

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

+7

Чтобы добавить для '(array)' cast, '*' для protected и * classname * для закрытых членов будет заключен в null-байты ('\ x00'), поэтому строго это' \ x00 * \ x00 'для защищенных членов, а также для частных членов:' \ x00className \ x00'. Связано: ** [Array to Object и Object to Array в PHP - интересное поведение] (http://stackoverflow.com/questions/6325447/array-to-object-and-object-to-array-in-php-interesting -behaviour/6325631 # 6325631) ** – hakre

+1

Еще одно отличие (по крайней мере, в PHP 5): с 'get_object_vars' ключи будут переданы int, если они являются числами, где casting возвращает строковые индексы: https://3v4l.org/ 2Wb9j – Sherbrow

2

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

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

+2

Почему массив должен быть менее надежным в своем поведении, чем функция? У вас есть документация, поддерживающая его? – zneak

1

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