2017-01-12 11 views
1

オブジェクトに後でバインドされるクロージャを作成するサードパーティのコードがあります。閉鎖対象の収量に ますprint_rこの:クロージャがバインドされているオブジェクトのクラス名を調べるにはどうすればよいですか?

Closure Object ([this] => am4Widgets Object ()) 

今、私がバインドされたオブジェクト(この場合の「am4Widgets」)の「のinstanceof」を取得する必要があり、

print_r(myClosureObject instanceofboundobject am4Widgets); 
のような擬似コードのいくつかの種類

これは 'TRUE'を出力するはずです。

私はphp.netを検索しましたが、無駄です。

ご意見/ご提案はありがとうございます。

UPDATE:クロージャが作成されたのはここ

は(私は変更することはできませんコードのスニペット)である:

function initActions() 
{ 
    parent::initActions(); 
    . 
    . 
    . 
    add_action('wp_head', function(){ 
     $ajax_url = admin_url('admin-ajax.php'); 
     echo <<<CUT 
<script>...some javascript code...</script> 
CUT; 
    }); 
} 

実は、私は何をしようとしてることはwp_headから閉鎖を外すことです私はフッターでそれが必要なので。

私はグローバルなwordpress '$ wp_filtersを使用してすべての登録フックにアクセスしていますが、今私はアンフックしたいクロージャを一意に識別する方法が必要です。クロージャのバインドされたオブジェクト

+0

どのようにあなたの«クロージャオブジェクト»を定義していますか? –

+0

これをチェックしてください:http://wordpress.stackexchange.com/questions/137688/remove-actions-filters-added-via-anonymous-functions – yivi

+0

@ゲーマンラシェビッチこのケースでは、 "クロージャー"は、wordpress ' add_action()関数に2番目のパラメータとして渡された "functio(){}"ブロックの基になるフレームワークです。 –

答えて

2

この目的のためにReflectionFunctionオブジェクトを使用できます。

class A {} 

$closure = (function() { 
    echo '$this class from closure: ' . get_class($this) . "\n"; 
})->bindTo(new A()); 

$closure(); 

$fn = new ReflectionFunction($closure); 
echo '$this class from reflection: ' . get_class($fn->getClosureThis()); 

出力:

$this from closure: A 
$this from reflection: A 
+0

ビンゴ!まさに私が何をしたのか。非常にドイツ語ありがとうございます。 –

関連する問題