Возможно ли получить доступ к данным SplObjectStorage
с использованием Reflection или какого-либо другого метода? Когда я использую print_r
, я вижу, что есть частная собственность $storage
с массивом, содержащим все данные, но я не могу получить к нему доступ с использованием Reflection. Есть ли еще какое-то другое решение для получения данных без итерации по коллекции с помощью foreach
?Доступ к данным SplObjectStorage через Reflection
ответ
Невозможно получить доступ к объекту $storage
через Reflection, так как его не существует.
Что вы видите, когда звоните print_r
(или var_dump
) по классу: отладочная информация. Эта информация предоставляется через внутренний обработчик get_debug_info
класса. Этот обработчик позволяет внутренним классам отображать значимую отладочную информацию без определения фактических свойств.
тангенциально смежный вопрос показывает со следующим фрагментом:
$r = new ReflectionClass('DateTime');
var_dump($r->hasProperty("timezone"));
Приведенный выше код будет вам сказать, что класс не имеет timezone
свойство, даже если вы можете получить доступ к timezone
собственности на DateTime
объектов. Причина в том, что это свойство не объявлено, оно предоставляется только через внутренний обработчик get_properties
. Еще раз, это свойство, которое не предназначено для прямого доступа, оно существует только для того, чтобы: a) обеспечить значимый вывод отладки и b) указать, что должно быть сериализовано, когда объект сериализуется.
В целом: Отражение на «свойствах» внутренних классов обычно не работает, просто потому, что эти свойства часто не существуют.
- 1. Доступ к данным hyperfileSQL через #
- 2. Доступ к данным через HTTP
- 3. Доступ к данным через сеансы
- 4. Java, доступ к частной собственности через Reflection
- 5. Доступ к данным через несколько миграций
- 6. Доступ к данным через узел POSIX Tdelete()
- 7. Доступ к данным из столбца через PHP
- 8. Доступ к многомерным данным JSON через php.
- 9. Доступ к данным JSON через jQuery
- 10. Доступ к данным через опцию на моделях
- 11. Доступ к данным таблицы через jquery (coffeescript)
- 12. доступ к данным Google Analytics через api
- 13. QML - Доступ к данным QList через модель
- 14. Доступ к данным XML через javascript
- 15. Доступ к данным через BigQuery в python
- 16. Доступ к данным таблицы через отношение
- 17. Доступ к данным SQLite через Javascript?
- 18. Доступ к данным приложения
- 19. Доступ к массиву из поля объекта через Reflection
- 20. Доступ к данным неверен?
- 21. Доступ к данным __NSDictionaryI
- 22. Доступ к данным CMDeviceMotion
- 23. Доступ к данным ViewBag
- 24. Доступ к данным вариант
- 25. Доступ к данным делегата
- 26. Realm доступ к данным
- 27. Доступ к данным USB
- 28. Доступ к данным NSManagedObject
- 29. Доступ к данным Блокнот
- 30. Доступ к данным CrossPost
Я так не считаю ([посмотрите код] (http://lxr.php.net/xref/PHP_5_4/ext/spl/spl_observer.c#_spl_SplObjectStorage), если вы хотите), но что неправильно с итерацией? –
@fab Я не хочу влиять на состояние объекта (изменение индекса итерации и т. Д.). Во всяком случае, я буду использовать 'clone' на данный момент ... – Smasty