【发布时间】:2017-05-27 10:23:04
【问题描述】:
我有一些第三方代码可以创建一个闭包,然后绑定到一个对象。 闭包对象上的 print_r 会产生这样的结果:
Closure Object ( [this] => am4Widgets Object ( ) )
现在我需要检索绑定对象的“instanceof”(在本例中为“am4Widgets”),某种伪代码,如
print_r(myClosureObject instanceofboundobject am4Widgets);
应该输出'TRUE'。
我已经搜索了 php.net 但无济于事。
提前感谢您的任何想法/建议。
更新:
这里是创建闭包的地方(我无法修改的代码的 sn-p):
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 来访问所有已注册的钩子,但现在我需要一种方法来唯一地标识我想要解除钩子的闭包,如果有一种方法可以访问闭包的绑定对象。
【问题讨论】:
-
你如何定义你的«闭包对象»?
-
@German Lashevich 在这种情况下,“闭包”是由 wordpress 的底层框架基于作为第二个参数传递给 add_action() 函数的“functio(){}”块构建的。
-
@yivi 感谢 Yivi 的提示。已经找到谷歌搜索。它非常接近我正在寻找的东西,但并不完全相同。第一个答案中的方法将删除同一优先级内的 all 闭包,而我正在寻找一种方法来删除 only 由其绑定对象标识的闭包。一个肮脏的黑客将是封装 ob_start() 和 ob_end_clean() 之间的 print_r() 调用并搜索字符串(在我的例子中:am4Widget),但是,正如所说,这是一个黑客,一个肮脏的黑客。如果可能的话,我宁愿采用更多的 OO 代码方法。
标签: php oop closures classname