php - 如何找出闭包绑定(bind)到的对象的类名?

标签 php oop closures classname

我有一些第三方代码,它创建一个闭包,然后将其绑定(bind)到一个对象。 闭包对象上的 print_r 会产生以下结果:

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

现在我需要检索绑定(bind)对象的“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 来访问所有已注册的钩子(Hook),但现在我需要一种方法来唯一标识我想要取消钩子(Hook)的闭包,如果有一种方法可以访问闭包的方法,这可能是一项简单的任务绑定(bind)对象。

最佳答案

您可以使用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

关于php - 如何找出闭包绑定(bind)到的对象的类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41611015/

相关文章:

php - 纬度经度脚本给出 MySQL 错误 "You have an error in your SQL syntax; ... for the right syntax to use near ' long”

php - 让用户链接网站中的网络摄像头以进行流式传输

PHP 函数转义 MySQL 正则表达式语法

java - 匿名类中的非最终非局部变量

javascript - 无法访问javascript中函数内的函数

javascript - 轻松理解 JavaScript 闭包中的示例

php - Ubuntu 上的所有帐户都拒绝 MySQL 访问,但 PHPMyAdmin 工作正常?

javascript - 在每个循环内创建对象实例

javascript - 搜索对象数组中的出现情况

python-3.x - 当参数可以具有从特定基类型派生的任何类型时,如何注释抽象方法的参数类型?