Dov'è la differenza tra sé e $ this-> in una class PHP o in un metodo PHP?

Dov'è la differenza tra self e $this-> in una class PHP o in un metodo PHP?

Esempio:

Ho visto questo codice recentemente.

 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; } 

Ma ricordo che $this-> riferisce all'attuale istanza (object) di una class (potrebbe anche essere sbagliato). Tuttavia, qual è la differenza?

$this riferisce all'istanza della class, che è corretta. Tuttavia, esiste anche qualcosa chiamato statico, che è lo stesso per tutte le istanze di quella class. self:: è l'accessore per quegli attributi e funzioni.

Inoltre, non è ansible accedere normalmente a un membro di istanza da un metodo statico. Significato, non puoi farlo

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

perché il metodo statico non saprebbe a quale istanza si sta riferendo.

$this riferisce all'object corrente, self riferisce alla class corrente. La class è il progetto dell'object. Quindi definisci una class, ma costruisci oggetti.

Quindi, in altre parole, usa te stesso per statico e questo per i membri o i methods non statici.

self viene utilizzato all'ambito del livello di class mentre $this è utilizzato a livello di livello dell'istanza.

$this è usato per referenziare methods e properties; dell'istanza corrente di una class.

self us usava fare riferimento a methods e properties; statici, condivisi da tutte le istanze (e persino accessibili al di fuori di each istanza) di una class.

Puoi dare un'occhiata a Static Keyword (citando poche righe) :

Dichiarare properties; o methods di class come statici li rende accessibili senza bisogno di un'istanza della class. Non è ansible accedere a una properties; dichiarata come statica con un object class istanziato (sebbene un metodo statico possa)

Non è ansible accedere alle properties; statiche tramite l'object utilizzando l'operatore freccia ->.

E, dalla pagina Proprietà (citando) :

All'interno dei methods di class è ansible accedere alle properties;, alle costanti e ai methods utilizzando il module $this->property (where property è il nome della properties;) a less che l'accesso sia a una properties; statica nel context di un metodo di class statico, in a quale caso è ansible accedere usando il module self::$property .

self riferisce alla class dell'object chiamante. $this riferisce all'object stesso.

$ questo è usato per call l'istanza della class, where self :: è usato principalmente per call la variabile costante all'interno della class.

  1. questo-> non può accedere al metodo statico o all'attributo statico, noi usiamo sé per accedervi.
  2. $ this-> quando si ha a che fare con la class estesa si riferirà allo scope corrente che si estende, auto si riferirà sempre alla class genitore perché non ha bisogno di un'istanza per accedere al metodo di class o di accedere direttamente alla class.

     <?php class FirstClass{ function selfTest(){ $this->classCheck(); self::classCheck(); } function classCheck(){ echo "First Class"; } } class SecondClass extends FirstClass{ function classCheck(){ echo "Second Class"; } } $var = new SecondClass(); $var->selfTest(); //this-> will refer to Second Class , where self refer to the parent class