查看PHP类实例(对象)以查看其所有可用公共属性和方法的最佳方法是什么?

时间:2011-06-27 20:20:42

标签: php oop debugging object reflection

对不起,新手问题,但无论如何,

我正在尝试使用Google Data API处理一些Google Spreadsheets,我正在尝试使用var_dump来查看我从其API调用中收到的对象的结构。我尝试使用var_dump,但它没有给我我期望的东西。它向我显示的大多数属性都显示为受保护,如下所示:

...

["_entryClassName:protected"]
...

我已经尝试查看如何访问对象属性的示例以及我可以使用属性访问运算符实际访问的属性( - >)我甚至没有在var_dump输出中看到它们。

所以,我真的很困惑,我想知道什么是最好的方法让我知道我的类实例的公共属性和方法是什么,有多少是在那里?

感谢您提前提供任何帮助。

5 个答案:

答案 0 :(得分:5)

我认为你想要PHP的ReflectionClass,它在运行时返回有关类定义的信息。

例如,getMethods函数接受参数以确定它是否应返回有关privateprotectedpublicstatic方法等的信息。尽管如此它在php.net上说,

  

此功能目前不是   记录;只有它的参数列表是   可用。

我不确定ReflectionClass文档的其余内容有多充分,但这让我觉得你可能想做一些黑客攻击,以达到你想要的目的。

答案 1 :(得分:3)

我建议使用带有调试器的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";
}

答案 2 :(得分:1)

请参阅php手册中的get_class_methods

答案 3 :(得分:0)

您可以在Zend Framework的API文档中找到官方API文档(因为它的一部分):http://framework.zend.com/apidoc/core/(在包Zend_Gdata中)

作为旁注:ZF仅实现访问方法(get*()set*())而不是公共属性。

答案 4 :(得分:0)

您可以使用:

  1. get_class_methods()和get_object_vars()函数或
  2. ReflectionClass http://www.php.net/manual/en/class.reflectionclass.php
  3. 使用第一种方法查看示例:

    <?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));