如何找出闭包绑定到的对象的类名?
How can I find out the classname of an object a closure is bound to?
我有一些第三方代码创建了一个闭包,该闭包随后绑定到一个对象。
闭包对象上的 print_r 产生这个:
Closure Object ( [this] => am4Widgets Object ( ) )
现在我需要检索绑定对象的 'instanceof'(在本例中为 'am4Widgets'),某种类似于
的伪代码
print_r(myClosureObject instanceofboundobject am4Widgets);
应该输出 'TRUE'.
我搜索过 php.net 但没有结果。
提前感谢任何idea/suggestion。
更新:
这里是创建闭包的地方(我无法修改的代码片段):
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 来访问所有已注册的钩子,但现在我需要一种方法来唯一标识我想解开钩子的闭包,如果有的话,这可能是一件容易的事一种访问闭包绑定对象的方法。
您可以为此目的使用 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
我有一些第三方代码创建了一个闭包,该闭包随后绑定到一个对象。 闭包对象上的 print_r 产生这个:
Closure Object ( [this] => am4Widgets Object ( ) )
现在我需要检索绑定对象的 'instanceof'(在本例中为 'am4Widgets'),某种类似于
的伪代码print_r(myClosureObject instanceofboundobject am4Widgets);
应该输出 'TRUE'.
我搜索过 php.net 但没有结果。
提前感谢任何idea/suggestion。
更新:
这里是创建闭包的地方(我无法修改的代码片段):
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 来访问所有已注册的钩子,但现在我需要一种方法来唯一标识我想解开钩子的闭包,如果有的话,这可能是一件容易的事一种访问闭包绑定对象的方法。
您可以为此目的使用 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