【问题标题】:PHP: Get list of all Class Properties (public and private) without instantiating classPHP:在不实例化类的情况下获取所有类属性(公共和私有)的列表
【发布时间】:2018-09-20 01:09:38
【问题描述】:

我有一个 POPO(普通旧 PHP 对象):

namespace App\Objects;

class POPO  {
    private $foo;
    private $bar;

    // getters and setters //
}

在其他地方,我有一个(详细信息 - 类的作用并不重要)类,它需要知道 POPO 的属性名称。 POPO 没有传递给这个类,这个类也不实例化 POPO 或关心它的属性值。

class POPODetails  {
    private $POPOclassName = "App\Object\POPO";  //determined programatically elsewhere.

    public getProperties(): array  {
        return get_class_vars($this->POPOClassName);  //this will only return public properties.
    }
}

要使用get_object_vars,我需要传入一个实例化对象,否则我不需要它,并且仍然只能获得公共属性。我可以使用ReflectionClass::getProperties(),但还需要传入一个实例化对象。

那么,有没有办法只使用完全限定的类名来获取类变量列表?

【问题讨论】:

    标签: php reflection private-members


    【解决方案1】:

    你仍然可以使用ReflectionClass,php.net 告诉我们关于构造函数参数的以下内容:

    可以是包含要反映的类的名称的字符串,也可以是一个对象。

    所以

    <?php
    
    class SomeClass
    {
        private $member;
    
        private $othermember;
    }
    
    $cls = new ReflectionClass( SomeClass::class );
    print_r( $cls->getProperties() );
    

    将打印:

    Array
    (
        [0] => ReflectionProperty Object
            (
                [name] => member
                [class] => SomeClass
            )
        [1] => ReflectionProperty Object
            (
                [name] => othermember
                [class] => SomeClass
            )
    )
    

    【讨论】:

      猜你喜欢
      • 2015-07-19
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多