如何找到闭包绑定的对象的类名?

时间:2017-01-12 10:41:19

标签: php oop closures classname

我有一些第三方代码创建了一个后来绑定到对象的闭包。 闭包对象上的print_r产生了这个:

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

现在我需要检索绑定对象的'instanceof'(在本例中为'am4Widgets'),某种伪代码如

print_r(myClosureObject instanceofboundobject am4Widgets);

应该输出'TRUE'。

我搜索过php.net,但无济于事。

提前感谢任何想法/建议。

更新:

这是创建闭包的地方(我无法修改的代码片段):

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来访问所有已注册的钩子,但现在我需要一种方法来唯一地识别我想解开的闭包,如果有办法访问闭包,这可能是一个简单的任务绑定对象。

1 个答案:

答案 0 :(得分: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