获取非’;带PHP反射的t静态
我需要使用来获取非静态类的所有公共可访问属性 为了只获取非静态的公共属性,我能看到的唯一方法是获取IS_静态属性,并使用获取非’;带PHP反射的t静态,php,api,class,object,Php,Api,Class,Object,我需要使用来获取非静态类的所有公共可访问属性 为了只获取非静态的公共属性,我能看到的唯一方法是获取IS_静态属性,并使用array_diff()仅获取公共属性 最后一节课是这样的: class foo { public static $a; public static $b; public static $c; public $d; public $e; public $f; public function reflect()
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";
}
}
}
d
e
f
电话:
reflect()
的输出现在如下所示:
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";
}
}
}
d
e
f
问:有没有更好的方法
注意:我原来的课太长了!这个类与我的类类似。最快的方法就是使用
get\u object\u vars
,对于您的情况:
print_r(get_object_vars($foo));
// outputs
Array
(
[d] =>
[e] =>
[f] =>
)
键是属性的名称
但是实例化一个实例可能会非常繁重。因此,您仍然可以使用反射和一些过滤:
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";
}
}
反射用于其他用途,我认为应该在真实对象上使用
get\u object\u vars(object$object)
`你的意思是如何获得非静态?只需获得所有公共道具并使用应用数组过滤器!->isStatic
对于这种情况,您不需要使用反射,$a=new Foo();变量转储(\get\u object\u vars($a))代码>这很好,您将获得对象的所有公共和非静态属性你能解释一下为什么它比我的解决方案更好吗?至少因为你不必使用array\u diff
。该死!我需要再次查看array\u filter()
和array\u diff()
,内存不好:)我现在就试试看,看看有什么不同。谢谢!在我的主类中有一些重复的键,所以我必须使用两个函数array\u diff()
来查找重复的键,然后array\u filter()
来获得无静态,我不确定性能,但它会按照要求执行。谢谢。