Php 究竟什么是'$这";在add_action()中

Php 究竟什么是'$这";在add_action()中,php,wordpress,this,action,Php,Wordpress,This,Action,我不时看到的一些add_action()语句提供了一个数组,其中第一个参数是$this,第二个参数是函数 据我所知,$这是《公安条例》目前的情况,但在这个特殊情况下呢?举个例子,我们有一个通讯系统,可以注册你的电子邮件地址,除非它仍然存在于数据库中 <?php public function save_email() { if (isset($_POST['zero_newsletter_email']) && !empty($_POST['zero_newslet

我不时看到的一些add_action()语句提供了一个数组,其中第一个参数是$this,第二个参数是函数

据我所知,$这是《公安条例》目前的情况,但在这个特殊情况下呢?举个例子,我们有一个通讯系统,可以注册你的电子邮件地址,除非它仍然存在于数据库中

<?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','save_email');

这篇评论太长了


$this
是当前类的当前实例。因此,它将是调用钩子的实例。或者添加操作的类

add_action('wp_loaded', array($this, 'save_email'));
这是当前类中的保存电子邮件

为什么我们不能按照下面的方法做呢

add_action('wp_loaded','save_email');
add_action('wp_loaded'、'save_email')

因为你不能。。。只是开玩笑

这是由于使用了
call\u user\u func\u数组

这是做这件事的内在方式。我确信它还与函数的调用方式有关,因为如果没有类,如果这是一个函数或类的方法,那么它将是不明确的


在您当前的例子中,PHP会认为这是一个函数。即使有一种方法可以告诉它,但它不是,您如何告诉它该方法在哪个类中。因此,将类放在…

中更容易、更安全,因为
save_email
是一个类方法,我们从
$this
类实例(即从拥有该方法的类内部)添加操作


该数组表示一个可调用的PHP,请参见示例中的类型3:

$this
是当前类的当前实例。因此,它将是调用钩子的实例。你不能,因为你不能,因为你看不见,非常感谢你的反馈。我将把它作为一个内部逻辑齿轮,并假设它是如何被假定的。如果你想要一个新的实例,你也可以使用
[[uuuuuu CLASS][uuuuuuuu,'method']
。对于静态,您可以执行
\uuuuu类]::方法“
,没有这些,我们只能执行函数(如果您将闭包称为函数)交互测试!此外,我假设您需要一个新实例的情况基本上是边缘情况,但最好记住,
\uuuuuu CLASS\uuuuuu>可能只是当前类的完整类名(名称空间和类)的一个神奇常量。你也可以把它打进去。现在你也可以做
Someclass::class
,这真是太好了。非常感谢,很高兴你帮我在这个令人困惑的陈述上添加了一些合理性。很高兴知道!