1

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
4

1 回答 1

1

如果您使用的是 PHP 5.4,它已经是一个可调用的:

$contextAndFunction();

这是一个演示。

否则,call_user_func将按原样工作。

call_user_func($contextAndFunction);

还有一个演示。

于 2012-07-28T23:17:53.473 回答