Каков наилучший способ заглянуть внутрь экземпляра (объекта) класса PHP, чтобы увидеть все его доступные публичные свойства и методы? - PullRequest
1 голос
/ 28 июня 2011

Извините, вопрос новичка здесь, но в любом случае,

Я пытаюсь использовать API данных Google для работы с некоторыми таблицами Google, и я пытаюсь использовать var_dump для просмотра структуры объектов, которые я получаю от вызовов API. Я пытался использовать var_dump, но он не дает мне то, что я ожидаю. Большинство свойств, которые он показывает, отображаются как защищенные, как это:

...

["_entryClassName:protected"]
...

и я попытался посмотреть примеры доступа к свойствам объектов и свойств, к которым я могу получить доступ с помощью оператора доступа к свойству (->), я даже не вижу их в выводе var_dump.

Итак, я действительно сбит с толку, и мне было интересно, как мне лучше узнать, какие публичные свойства и методы у моего экземпляра класса и сколько их существует?

Спасибо за любую помощь заранее.

Ответы [ 5 ]

5 голосов
/ 28 июня 2011

Я думаю, вам нужен PHP ReflectionClass , который возвращает информацию об определении класса во время выполнения.

Функция getMethods , например, принимает параметры, чтобы определить, должна ли она возвращать информацию о private, protected, public, static методах и т. Д. Хотя, как сказано на php.net

Эта функция в настоящее время не документально; только список аргументов имеется.

Я не уверен, насколько полна остальная часть документации ReflectionClass, но это заставляет меня думать, что вы, возможно, захотите подготовиться к небольшому взлому, чтобы достичь именно того, что вы хотите.

3 голосов
/ 28 июня 2011

Я бы предложил использовать IDE с отладчиком для этой работы.

Однако, если вы хотите сделать это трудным путем, вы можете использовать отражение, и особенно ReflectionClass, который имеет ряд полезных методов:

http://www.php.net/manual/en/class.reflectionclass.php

Пример:

$c = new ReflectionClass( get_class($myObject) );
$properties = $c->getProperties(
   ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED
   );
foreach ($properties as $property) {
    echo $property->getName() . "\n";
}
1 голос
/ 28 июня 2011

См. get_class_methods в руководстве по php.

0 голосов
/ 28 июня 2011

Вы можете использовать:

  1. функции get_class_methods () и get_object_vars () или
  2. ReflectionClass http://www.php.net/manual/en/class.reflectionclass.php

См. Пример с первым методом:

<?php

class Test {
    public $public_property       = 'public_property';
    protected $protected_property = 'protected_property';
    private $private_property     = 'private_property';

    public function public_method() {}
    protected function protected_method() {}
    private function private_method() {}
}

$instance = new Test();

// Show public methods
print_r(get_class_methods($instance));
// Show public properties
print_r(get_object_vars($instance));
0 голосов
/ 28 июня 2011

Вы можете найти официальную документацию по API в документации по API Zend Framework (поскольку она является его частью): http://framework.zend.com/apidoc/core/ (в пакете Zend_Gdata)

В качестве обозначения:ZF реализует только методы доступа (get*() и set*()) вместо открытых свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...