Selbst vs. Dies in PHP

Selbst vs. Dies in PHP

PHP unterstützt Klassen und andere objektorientierte Konstrukte. Statische Funktionen und Variablen in PHP -Klassen sind mit keiner spezifischen Instanz der Klasse verbunden (mit anderen Worten ein Objekt). Siehe Unterschied zwischen Objekt Und Klasse.

Stattdessen werden statische Funktionen und Variablen mit der Klassendefinition selbst verknüpft. Mit anderen Worten, alle Instanzen einer Klasse haben die gleiche statische Variable. Im Kontext einer Methode (Funktion) einer Klasse werden statische Variablen und Funktionen mit Verwendung zugegriffen selbst::. Andere Methoden und Variablen werden im Kontext eines Objekts (einer Instanz) einer Klasse verwendet, die verwendet werden this->.

Vergleichstabelle

Selbstversus dieses Vergleichsdiagramms
selbstDas
Kann in statischen Funktionen verwendet werden Ja NEIN
zugängliche Klassenvariable und Methoden mit selbst:: $ this-> (Beachten Sie, dass Php> 5.3 Ermöglicht die Verwendung von $ this mit statischen Variablen. Verwenden Sie $ this :: $ foo. $ this-> foo wird immer noch undefiniert sein, wenn $ foo ein statischer Var ist.)
Braucht ein instanziiertes Objekt NEIN Ja

Selbst gegen dies in PHP - Beispielen

Klassenprüfung public static $ foo; öffentlich $ bar; public function regelwunsch () echo $ this-> bar;  öffentliche statische Funktion staticFunction () echo self :: $ foo;  public statische Funktion anotherstatfn () self :: staticFunction ();  public function regelmäßige FnusingStaticVar () echo self :: $ foo;  // Hinweis: Ab PHP 5.3 Verwenden $ this :: $ bar anstelle von self :: $ bar ist erlaubt exampleClass :: $ foo = "Hallo"; $ obj = new everleClass (); $ obj-> bar = "Welt!"; exampleClass :: staticFunction (); /* druckt Hallo* /$ obj-> regelmäßige Funktion (); /* Drucke Welt! */ 

Statische Funktionen können nur statische Variablen verwenden. Statische Funktionen und Variablen werden über über selbst::FunktionName () oder selbst::Variablennamen. In dem oben gezeigten Beispiel werden statische Variablen mit dem Klassennamen (evitcleclass :: $ foo) oder mit a referenziert selbst:: (Selbst :: $ foo) Wenn sie innerhalb der statischen Methode verwendet werden [genannt staticfunction ()] der Klasse.

Regelmäßige Funktionen und Variablen einer Klasse benötigen einen Objektkontext, um zu referenzieren. Sie können nicht ohne Objektkontext existieren. Der Objektkontext wird von bereitgestellt von $ das. Im obigen Beispiel ist $ bar eine reguläre Variable und wird daher als $ obj-> bar bezeichnet (im Objektkontext mit Variable obj) oder als $ this-> bange (wieder in einem Objektkontext innerhalb einer Methode eines Objekts).

selbst verwendet keine vorhergehende $ Weil selbst Betont keine Variable, sondern das Klassenkonstrukt selbst. $ das verweist auf eine bestimmte Variable, sodass sie vorangegangen ist $.