【问题标题】:PHP's function to list all objects's properties and methodsPHP函数列出所有对象的属性和方法
【发布时间】:2009-09-03 08:27:19
【问题描述】:

有没有类似于 Python 的dir() 的 PHP 中列出所有对象的公共方法和属性的函数?

【问题讨论】:

    标签: php oop


    【解决方案1】:

    您可以使用get_object_vars 列出对象变量,使用get_class_methods 列出给定类的方法。

    【讨论】:

      【解决方案2】:

      PHP5 包含一个完整的Reflection API,以超越旧的get_class_methodsget_object_vars 的功能。

      【讨论】:

        【解决方案3】:

        您可以使用反射 API 的 ReflectionClass::getPropertiesReflectionClass::getMethods 方法来执行此操作(尽管 API 似乎没有很好的文档记录)。请注意,PHP 反射仅反映编译时信息,而不是运行时对象。如果您希望运行时对象也包含在查询结果中,最好使用get_object_varsget_class_varsget_class_methods 函数。 get_object_varsget_class_vars 之间的区别在于,前者获取给定对象上的所有变量(包括在运行时动态添加的变量),而后者仅提供已在类中显式声明的变量。

        【讨论】:

        • 我认为当您说:“...get_class_vars 只为您提供那些已在类中明确声明的变量”并且相关的 VALUES 是声明的变量时,我认为有一点需要补充在类中(默认值)而不是运行时值。
        【解决方案4】:
        Reflection::export(new ReflectionObject($Yourobject));
        

        【讨论】:

        • 请注意,这将返回一个格式化字符串,而不是属性数组,如 python 的 dir()。
        • PHP 8 中将移除导出功能
        【解决方案5】:

        如果你想更深入,也想得到对象的私有变量,你可以使用闭包。喜欢:

        $sweetsThief = function ($obj) {
          return get_object_vars($obj);
        };
        
        $sweetsThief = \Closure::bind($sweetsThief, null, $myobj);
        
        var_dump($sweetsThief($myobj));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-15
          • 1970-01-01
          • 2015-07-21
          • 2011-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-07
          相关资源
          最近更新 更多