我不时看到的一些add_action()语句都提供了一个数组,其中第一个参数是$ this,第二个参数是函数。
据我所知,$ this表示POO中的当前实例,但是在这种情况下呢?举个例子,我们有一个新闻通讯系统可以注册您的电子邮件地址,除非它仍然存在于数据库中。
<?php
public function save_email()
{
if (isset($_POST['zero_newsletter_email']) && !empty($_POST['zero_newsletter_email'])) {
global $wpdb;
$email = $_POST['zero_newsletter_email'];
$row = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}zero_newsletter_email WHERE email = '$email'");
if (is_null($row)) {
$wpdb->insert("{$wpdb->prefix}zero_newsletter_email", array('email' => $email));
}
}
}
现在,我们需要将其声明为可用操作。为什么我们需要一个像这样的数组?
add_action('wp_loaded', array($this, 'save_email'));
为什么我们不能简单地按照以下步骤做?
add_action('wp_loaded','save_email');
答案 0 :(得分:1)
这个评论太长了。
$this
是当前类的当前实例。因此,它将是调用该钩子的实例。或要添加动作的类。
add_action('wp_loaded', array($this, 'save_email'));
这是当前课程中的保存电子邮件。
为什么我们不能简单地按照以下步骤做?
add_action('wp_loaded','save_email');
因为你不能……只是在开玩笑。
这是由于使用了call_user_func_array
http://php.net/manual/en/function.call-user-func-array.php
这是内置方法。我确信它也与函数的调用方式有关,因为如果没有类,那么如果这是一个函数或一个类的方法将是模棱两可的。
在您提出的情况下,PHP会认为这是一个函数。即使有一种方法可以告诉它,但不是,您如何告诉它该方法位于哪个类中。因此,只需将该类放在...中,将更加容易和安全。
答案 1 :(得分:1)
因为save_email
是一个类方法,所以我们要从$this
类实例(即从拥有该方法的类中)添加操作。
该数组表示可调用的PHP,请参见示例中的类型3:http://php.net/manual/en/language.types.callable.php