我有一个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()
,但也需要传递实例化的对象。
那么,有没有办法仅使用完全合格的类名来获取类变量的列表?
答案 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
)
)