Dlk*_*Dlk 3 php api class object
我需要使用PHP 反射 API来获取非 static类的所有可公开访问的属性。
为了只获取非静态的公共属性,我能看到的唯一方法是获取 IS_STATIC 属性并用于array_diff()仅获取公共属性。
最后的课程是这样的:
class foo {
public static $a;
public static $b;
public static $c;
public $d;
public $e;
public $f;
public function reflect()
{
$reflection = new ReflectionClass($this);
$public = $reflection->getProperties(ReflectionProperty::IS_PUBLIC);
$static = $reflection->getProperties(ReflectionProperty::IS_STATIC);
$properties = array_diff($public, $static);
foreach($properties as $property) {
echo $property->name . "n";
}
}
}
Run Code Online (Sandbox Code Playgroud)
称呼:
$foo = new foo;
$foo->reflect();
Run Code Online (Sandbox Code Playgroud)
reflect()现在的输出如下所示:
d
e
f
Run Code Online (Sandbox Code Playgroud)
问题:有没有更好的方法来做到这一点?
注意:我原来的班级太长了!这个类是一个类似于我的例子。
最快的方法肯定是 use get_object_vars,对于您的情况:
print_r(get_object_vars($foo));
// outputs
Array
(
[d] =>
[e] =>
[f] =>
)
Run Code Online (Sandbox Code Playgroud)
键是属性的名称。
但是实例化一个实例可能非常繁重。所以,你仍然可以使用反射和一些过滤:
public function reflect()
{
$reflection = new ReflectionClass($this);
$properties = array_filter(
$reflection->getProperties(ReflectionProperty::IS_PUBLIC),
function ($property) {
return !$property->isStatic();
}
);
foreach($properties as $property) {
echo $property->name . "\n";
}
}
Run Code Online (Sandbox Code Playgroud)