簡體   English   中英

如何調用PHP類中的自定義函數(wordpress do_action樣式)?

[英]How can I call a custom function that is part of a class in PHP (wordpress do_action style)?

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 5.4,則已經可以調用了:

$contextAndFunction();

這是一個演示。

否則, call_user_func將按原樣工作。

call_user_func($contextAndFunction);

還有的演示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM