如何从php中的闭包对象获取数组

时间:2016-07-07 08:45:46

标签: php

我有一个对象,当var_dump()ed

时产生以下内容
object(Closure)#78 (3) {
  ["static"]=>
     array(3) {
        ...
     }
}

有没有办法可以检索标记为static的数组?

我尝试了以下内容:

ReflectionClass::getProperty('static');//returns property static does not exit

ReflectionClass::getStaticPropertyValue('static');//Class Closure does not have a property named static

ReflectionClass::getProperties();// returns an empty array

ReflectionClass::getStaticProperties();//returns an empty array

$obj->static;//Closure object cannot have properties

get_obj_vars($obj);//returns an empty array

(array)$obj;//wraps $obj in an array, but does not CONVERT to an array

json_decode(json_encode($obj));//returns object(stdClass)#79 (0) {}

感谢。

2 个答案:

答案 0 :(得分:1)

您在此处看到的static属性是\Closure类的实现细节,仅供PHP内部使用。该类捕获此属性中的use d变量。

您无法访问此属性,并且您可以使用\Closure对象进行调用或传递它。

通过反射,您只能分别使用ReflectionFunctionAbstract::getClosureScopeClassReflectionFunctionAbstract::getClosureThis访问范围。

答案 1 :(得分:1)

private static function getRegistrar($callable)
    {
        if(is_callable($callable))
        {
            if(is_a($callable,'Closure'))
            {
                preg_match_all('/\[this\] => (.+) Object/', print_r($callable,true), $matches);
                if(count($matches)>1)
                    return $matches[1];
            }
            else if (is_array($callable) && count($callable)>0 && is_a($callable[0],'Object'))
            {
                return gettype($callable[0]);
            }


        }
    }