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

ope*_*rog 16 php oop this

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Tor*_*amo 17

$this指的是类的实例,这是正确的.但是,还有一种称为静态的东西,对于该类的所有实例都是相同的.self::是这些属性和功能的访问者.

此外,您通常无法从静态方法访问实例成员.意思是,你做不到

static function something($x) {
  $this->that = $x;
}
Run Code Online (Sandbox Code Playgroud)

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


Yac*_*oby 13

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

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