在 PHP 类或 PHP 方法中,自$this>之间的区别在哪里?

2022-08-30 19:42:14

在 PHP 类或 PHP 方法中,和 之间的区别在哪里?self$this->

例:

我最近看到了这个代码。

public static function getInstance() {

    if (!self::$instance) {
        self::$instance = new PDO("mysql:host='localhost';dbname='animals'", 'username', 'password');;
        self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    return self::$instance;
}

但我记得这指的是类的当前实例(对象)(也可能是错误的)。但是,有什么区别?$this->


答案 1

$this引用类的实例,这是正确的。但是,还有一种称为静态状态的东西,对于该类的所有实例都是相同的。 是这些属性和函数的访问器。self::

此外,通常不能从静态方法访问实例成员。意思是,你不能做

static function something($x) {
  $this->that = $x;
}

因为静态方法不会知道您指的是哪个实例。


答案 2

$this是指当前对象,是指当前类。类是对象的蓝图。所以你定义了一个类,但你构造了对象。self

换句话说,将 self 用于静态,将此用于非静态成员或方法。


推荐