PHP:在不实例化类的情况下获取所有类属性(公共和私有)的列表

时间:2018-09-20 01:09:39

标签: php reflection private-members

我有一个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(),但也需要传递实例化的对象。

那么,有没有办法仅使用完全合格的类名来获取类变量的列表?

1 个答案:

答案 0 :(得分: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
        )
)