#php
#php
Вопрос:
Я работаю с Zend, и в нем задействовано много объектов. Иногда я хочу просто распечатать объекты, потому что он динамически задает так много сеттеров и геттеров и различных других вещей, таких как методы. Для меня это своего рода способ подтвердить, что я это понимаю. Аналогично тому, как var_dumping массив и просмотр его структуры, есть ли способ, которым я могу сделать это для объектов классов?
Комментарии:
1. Вы можете использовать Reflection API для выполнения таких действий, как получение всех методов класса, но в той степени, в которой Zend Framework выполняет «динамически», это обычно связано с такими вещами, как
__call
и__get
, с которыми отражение не поможет.2. Извините, если я неправильно использовал терминологию. Какое слово лучше подходит для «динамически»?
3. Я думаю, это не столько «динамическая» часть, которую я считал плохо выбранной, в ней говорилось, что ZF динамически устанавливает методы. PHP (без некоторых необычных расширений) не позволяет добавлять методы к существующим классам, вместо этого он использует «волшебные методы», которые вы можете использовать для имитации такого поведения после моды. Это означает, что даже при использовании некоторых других функций, которые позволяют вам перечислять все методы, вы часто не видите всей картины.
4. Я понимаю, что вы говорите по большей части. Я думаю, для меня было бы естественно спросить, как я могу тогда увидеть всю картину целиком?
5. Если вы имеете в виду созданные экземпляры объектов, вы можете использовать
get_defined_vars()
для получения списка всех переменных, которые находятся в игре, перебирать этот список и проверять каждую переменную на наличие типов, а затем выбирать только те, которые являются объектами.
Ответ №1:
Начиная с PHP 5, print_r()
можно выводить свойства объектов аналогично отображению массива.
Ответ №2:
Вы можете использовать var_dump()
также для объектов. Это не ограничивается только массивами.
Также вы можете использовать print_r($obj)
. При работе с HTML, чтобы избежать вывода в одной строке при печати объекта / массива, вы можете ввести:
echo '<pre>print_r($obj, true)</pre>';
В качестве альтернативы в Zend Framework вы можете использовать Zend_Debug::dump($obj, $label = null, $echo = true);