如何调用属于 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 样式)?的主要内容,如果未能解决你的问题,请参考以下文章