2016-07-07 8 views
0

で閉鎖オブジェクトから配列を取得するには?は、どのように私は(が)</p> <pre><code>object(Closure)#78 (3) { ["static"]=> array(3) { ... } } </code></pre> <p>私は、静的なラベルされた配列を取得することができる手段はありエド以下のときのvar_dumpを生成するオブジェクトを持っているPHP

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

ちょうどアレイにアクセス: 'ますprint_r($ yourVar->静的); Rizier123 @' – Rizier123

+0

:私はまた、このエラーを与えることを試してみました。あるのはなぜ閉鎖オブジェクトは、プロパティ –

+0

を持つことはできませんあなたは閉鎖の内部を最初から突き止めていますか? – deceze

答えて

1

ここに表示されるstaticプロパティは、\Closureクラスのインプリメンテーションの詳細で、PHP内部のみです。このクラスは、このプロパティの変数useをキャプチャします。

このプロパティにアクセスすることはできません。\Closureオブジェクトで行うことができるのは、このプロパティを呼び出したり、渡したりすることだけです。

反射を使用すると、ReflectionFunctionAbstract::getClosureScopeClassReflectionFunctionAbstract::getClosureThisを使用してスコープにのみアクセスできます。それは正常な財産であるとして

0
 
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]); 
      } 


     } 
    } 

+2

ようこそStackOverflowへ。私はあなたがコードの壁を構築しているのを見ます。これが何をしているのか説明できますか? –

関連する問題

 関連する問題