Selbst vs. dies in PHP

PHP unterstützt Klassen und andere objektorientierte Konstrukte. Statische Funktionen und Variablen in PHP-Klassen sind keiner bestimmten Instanz der Klasse (dh einem Objekt) zugeordnet.. Siehe Unterschied zwischen Objekt und Klasse.

Stattdessen werden statische Funktionen und Variablen der Klassendefinition selbst zugeordnet. Mit anderen Worten, alle Instanzen einer Klasse haben dieselbe statische Variable. Auf statische Variablen und Funktionen wird im Kontext einer Methode (Funktion) einer Klasse mit zugegriffen selbst::. Andere Methoden und Variablen werden im Kontext eines Objekts (einer Instanz) einer Klasse verwendet dies->.

Vergleichstabelle

Selbst gegen diese Vergleichstabelle
selbstdiese
Kann in statischen Funktionen verwendet werden Ja Nein
zugängliche Klassenvariable und Methoden mit selbst:: $ this-> (Beachten Sie, dass PHP> 5.3 die Verwendung von $ this mit statischen Variablen erlaubt, verwenden Sie $ this :: $ foo. $ this-> foo ist immer noch undefiniert, wenn $ foo eine statische Variable ist.)
Benötigt ein instanziiertes Objekt Nein Ja

Selbst vs dies in PHP - Beispiele

class exampleClass public static $ foo; öffentliche $ bar; public function regularFunction () echo $ this-> bar;  public static function staticFunction () echo self :: $ foo;  public static function anotherStatFn () self :: staticFunction ();  public function regularFnUsingStaticVar () echo self :: $ foo;  // HINWEIS: Ab PHP 5.3 ist $ this :: $ bar anstelle von self :: $ bar zulässig. ExampleClass :: $ foo = "Hello"; $ obj = new exampleClass (); $ obj-> bar = "Welt!"; exampleClass :: staticFunction (); / * gibt Hallo aus * / $ obj-> regularFunction (); / * druckt die Welt! * / 

Statische Funktionen können nur statische Variablen verwenden. Statische Funktionen und Variablen werden über referenziert selbst::Funktionsname () oder selbst::Variablennamen. In dem oben gezeigten Beispiel werden statische Variablen mit dem Klassennamen (exampleClass :: $ foo) oder mit a referenziert selbst:: (self :: $ foo) bei Verwendung innerhalb der statischen Methode [statische Funktion genannt ()] der Klasse.

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

selbst verwendet kein vorangegangenes $ da selbst bezeichnet keine Variable, sondern das Klassenkonstrukt selbst. $ das referenziert eine bestimmte Variable, so dass sie eine vorangestellte hat $.

Verweise

  • Statisches Schlüsselwort - PHP.net