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
答案 0 :(得分:0)
如果您使用的是PHP 5.4,那么它已经是可调用的:
$contextAndFunction();
否则,call_user_func
将按原样运行。
call_user_func($contextAndFunction);