【问题标题】:What is the best way to look inside a PHP class instance (object) to see all of its available public properties and methods?查看 PHP 类实例(对象)以查看其所有可用的公共属性和方法的最佳方法是什么?
【发布时间】:2011-06-27 20:20:41
【问题描述】:

抱歉,这里是新手问题,但无论如何,

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

...

["_entryClassName:protected"]
...

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

所以,我真的很困惑,我想知道什么是我的类实例的公共属性和方法以及它们有多少的最佳方式?

提前感谢您的帮助。

【问题讨论】:

    标签: php oop debugging object reflection


    【解决方案1】:

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

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

    目前没有这个功能 记录在案;只有它的参数列表是 可用。

    我不确定ReflectionClass 文档的其余部分有多完整,但这让我认为您可能需要准备好进行一些修改以实现您想要的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        请参阅 php 手册中的get_class_methods

        【讨论】:

          【解决方案4】:

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

          附带说明:ZF 仅实现访问器方法(get*()set*())而不是公共属性。

          【讨论】:

            【解决方案5】:

            你可以使用:

            1. get_class_methods() 和 get_object_vars() 函数或
            2. 反射类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));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-12-22
              • 1970-01-01
              • 2010-10-18
              • 1970-01-01
              • 1970-01-01
              • 2011-07-10
              • 2019-12-17
              • 2018-10-07
              相关资源
              最近更新 更多