Jemand in der PHP-Gruppe fragte nach der Verwendung des Schlüsselworts self
. Die Antwort ist relativ offensichtlich: Sie können this
nicht verwenden, um Nicht-Member-Funktionen innerhalb eines statischen Members aufzurufen Funktion, aber Sie können self
Statische Mitgliedsfunktionen/Variablen/Konstanten aufrufen; andere Mitgliedsfunktionen können self
verwenden, um statische Mitgliedsfunktionen und nicht statische Mitgliedsfunktionen aufzurufen. Als sich die Diskussion vertiefte, stellte ich fest, dass self
nicht so einfach war. Vor diesem Hintergrund vergleicht und differenziert dieser Artikel zunächst mehrere Schlüsselwörter und fasst dann die Verwendung von self
zusammen. Der Unterschied zwischen
parent
, static
und this
Um self
vollständig zu verstehen, ist es notwendig, es von parent
, static
und geöffnet. Nachfolgend werden Vergleiche angestellt. Die Unterscheidung zwischen this
parent
und self
ist relativ einfach: parent
bezieht sich auf die versteckte Methode (oder Variable) der übergeordneten Klasse/Basisklasse und parent
Verweis auf eine eigene Methode (oder Variable). Beispielsweise wird der Konstruktor der übergeordneten Klasse im Konstruktor aufgerufen: self
class Base { public function __construct() { echo "Base contructor!", PHP_EOL; } } class Child { public function __construct() { parent::__construct(); echo "Child contructor!", PHP_EOL; } } new Child; // 输出: // Base contructor! // Child contructor!
static
Der allgemeine Zweck besteht darin, die Funktion oder Variable zu ändern, um daraus eine Klassenfunktion und -klasse zu machen Variable, und sie kann auch innerhalb der Funktion geändert werden. Variablen verlängern ihre Lebensdauer über die gesamte Lebensdauer der Anwendung. Aber seine Verknüpfung mit static
ist eine neue Verwendung, die seit PHP 5.3 eingeführt wurde: statische verzögerte Bindung. self
kann die zugehörige Klasse dynamisch zur Laufzeit ermittelt werden. Beispiel: static
class Base { public function __construct() { echo "Base constructor!", PHP_EOL; } public static function getSelf() { return new self(); } public static function getInstance() { return new static(); } public function selfFoo() { return self::foo(); } public function staticFoo() { return static::foo(); } public function thisFoo() { return $this->foo(); } public function foo() { echo "Base Foo!", PHP_EOL; } } class Child extends Base { public function __construct() { echo "Child constructor!", PHP_EOL; } public function foo() { echo "Child Foo!", PHP_EOL; } } $base = Child::getSelf(); $child = Child::getInstance(); $child->selfFoo(); $child->staticFoo(); $child->thisFoo();
Base constructor! Child constructor! Base Foo! Child Foo! Child Foo!
und self
: für statische Elementfunktionen static
zeigt auf die aktuelle Klasse des Codes, self
zeigt auf die aufrufende Klasse; bei nicht statischen Mitgliedsfunktionen unterdrückt static
den Polymorphismus und zeigt auf die Mitgliedsfunktion der aktuellen Klasse. self
ist äquivalent zu static
, die dynamisch auf die Funktion der aufrufenden Klasse verweist. Die drei Schlüsselwörter this
, parent
und self
sind sehr interessant, wenn sie zusammen betrachtet werden. Sie verweisen jeweils auf die übergeordnete Klasse, die aktuelle Klasse und die Unterklasse, die eine Art „“ haben. Vergangenheit, Gegenwart und Zukunft“-Geschmack. static
this
und self
sind die am meisten diskutierten und am wahrscheinlichsten missbrauchten Kombinationen. Die Hauptunterschiede zwischen den beiden sind wie folgt: this
this
kann self
self
zu verwenden, oder $this::
; $this->
kann nicht für den Zugriff auf nicht statische Mitgliedsvariablen verwendet werden, sondern nur self
this
Zu verwenden, wenn das Objekt instanziiert wurde, this
wird innerhalb einer nicht statischen Mitgliedsfunktion verwendet, self
unterdrückt polymorphes Verhalten und verweist auf die aktuelle Klassenfunktion; und die self
this
self
sofort ersichtlich? Um es in einem Satz zusammenzufassen: self
self
ersetzt den Klassennamen und verweist auf statische Mitgliedsvariablen und statische Funktionen der aktuellen Klasse;
this
Statische Mitgliedsfunktionen können keine nicht statischen Mitgliedsfunktionen über $
aufrufen, aber sie können über $this->
self::
-Ausgaben $this->
in statischen Funktionen und nicht statischen Funktionen in Ordnung. Sie sind alle self
string(4) "self"
$class = static::class; return $this instanceof $class; // 或者这样: return $this instanceof static;
Also, warum ist das so? Das? ! return $this instanceof static::class;
Das obige ist der detaillierte Inhalt vonParsen des PHP-Schlüsselworts self. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!