如何调用属于 PHP 类的自定义函数(wordpress do_action 样式)?

Posted

技术标签:

【中文标题】如何调用属于 PHP 类的自定义函数(wordpress do_action 样式)?【英文标题】:How can I call a custom function that is part of a class in PHP (wordpress do_action style)? 【发布时间】: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_func(array($this, $method), $par) from parent's constructor?**

Enqueue a function (like 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

【问题讨论】:

【参考方案1】:

如果您使用的是 php 5.4,它已经是可调用的:

$contextAndFunction();

Here's a demo.

否则,call_user_func 将按原样工作。

call_user_func($contextAndFunction);

And there's a demo.

【讨论】:

似乎不起作用。更新的问题包括我对你的例子的测试。 @cwd:您使用的是什么版本的 PHP?不管怎样,试试call_user_method($contextAndFunction[1], $contextAndFunction[0])。虽然...自 PHP 4.1.0. 以来已弃用 在开发盒上使用 5.3.1,然后在服务器上使用 5.3(但不是 5.4)。这给了我“已弃用:函数 call_user_method() 已弃用”并且没有输出。 @cwd:抱歉,显然它只适用于 PHP 5.4。 call_user_func 为我工作,不过... codepad.viper-7.com/giBwgw 好的,很高兴知道 5.4 的好处。我认为我在 5.3 中的错误实际上是在测试时没有使用 text/plain 标头(我通常启用),哈哈。所以很明显,即使我让它工作了,它也显示为空白。

以上是关于如何调用属于 PHP 类的自定义函数(wordpress do_action 样式)?的主要内容,如果未能解决你的问题,请参考以下文章

tp5怎么调用common里面自定义的函数

PHP怎么调用其他类的方法

实战Wordpres的CSRF漏洞利用

sql server 中的自定义函数应该如何调用?

php trait 有构造函数吗

YII2中自己写的自定义函数怎么调用