为什么需要将函数包装在数组中($this,Function)

时间:2015-04-16 作者:Simon

我是PHP和WordPress的新手,所以请温柔一点!

我正在构建一个插件——遵循一些教程,让它一切正常。

我的问题是,为什么我要调用的函数包含在array($this, function)? 例如,我在类中有此构造函数代码

 function __construct() {
      add_action( \'admin_init\',array( $this, \'getStuffDone\' ) );
 }
getStuffDone函数启动正常-但为什么它必须采用它所使用的格式?

非常感谢您的任何见解。

3 个回复
SO网友:TheDeadMedic

这是一个PHP callback. 您需要语法来保持对类实例的引用。

这样说吧-如果你没有$this, 打电话的人怎么知道的getStuffDone 是类的一个方法,而不仅仅是一个常规的PHP函数?事实并非如此。

使用array( $this, \'getStuffDone\' ) 对PHP说:

嘿,兄弟,你需要调用这个方法getStuffDone 在我的课堂上

SO网友:Loopo

函数定义如下所示:

 function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
     return add_filter($tag, $function_to_add, $priority, $accepted_args);
 }
因此,根据这一点,它看起来像是期望的(string,string,int,int)

在传统的php文件中,第二个参数只是一个函数名。

所以你会add_action(\'admin_init\',\'my_init_function\')

看起来您正在使用一个类来封装插件。其他类中可能有同名的函数(getStuffDone)。

所以你的函数只能通过引用你的类来知道,这就是为什么你必须指定你的类$this 以及函数名。

如果试图引用类中的函数,则必须使用array callable syntax

另请参见codex.wordpress.org

SO网友:farzad

请参阅文档,位于“User Contributed Notes“:

“使用add_action() when your plugin or theme is built using classes, 您需要使用数组可调用语法。您可以将函数传递给add_action() 作为一个数组$this 作为第一个元素,然后是类方法的名称。。。“”

结束