【发布时间】:2012-07-27 04:07:15
【问题描述】:
Wordpress 使用钩子和操作来实现可扩展性。插件可能看起来像这样:
class myLightbox
{
function __construct()
{
add_action('wp_footer',array($this,'my_footer'));
}
function my_footer()
{
echo '<script src="http://external-site.com/lightbox.js" ></script>';
}
}
如果我在 Wordpress 之外运行该代码,我希望 add_action 能够工作 - 即使它只是立即调用该函数。
我读过这些:
第二个与我想做的非常接近,但我认为它不是为使用属于类的函数而设计的。
我尝试使用call_user_function,但我不知道如何给它array($this,'my_footer') 的东西:
function add_action($whenToCall,$contextAndFunction=array())
{
call_user_func($contextAndFunction);
}
我也试过这个,但你可以看出我的 OOP 不是很好,所以我很挣扎:
function add_action($whenToCall,$contextAndFunction=array())
{
$function = array_pop($contextAndFunction);
$context = array_pop($contextAndFunction);
$context->$function();
}
使用minitech的建议测试失败:
class myLightbox
{
function __construct()
{
add_action('wp_footer',array($this,'my_footer'));
}
function my_footer()
{
echo '<script src="http://external-site.com/lightbox.js" ></script>';
}
}
function add_action($whenToCall,$contextAndFunction=array())
{
$contextAndFunction();
}
$myLightbox = new myLightbox();
生产:
Fatal error: Function name must be a string
【问题讨论】:
标签: php wordpress oop closures