Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取非’;带PHP反射的t静态_Php_Api_Class_Object - Fatal编程技术网

获取非’;带PHP反射的t静态

获取非’;带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()

我需要使用来获取非静态类的所有公共可访问属性

为了只获取非静态的公共属性,我能看到的唯一方法是获取IS_静态属性,并使用
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()
来获得无静态,我不确定性能,但它会按照要求执行。谢谢。