我有一个对象,当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) {}
感谢。
答案 0 :(得分:1)
您在此处看到的static
属性是\Closure
类的实现细节,仅供PHP内部使用。该类捕获此属性中的use
d变量。
您无法访问此属性,并且您可以使用\Closure
对象进行调用或传递它。
通过反射,您只能分别使用ReflectionFunctionAbstract::getClosureScopeClass
和ReflectionFunctionAbstract::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]); } } }