add_action()中的'$ this'到底是什么

时间:2019-02-08 21:15:43

标签: php wordpress this action

我不时看到的一些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');

2 个答案:

答案 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