Dieser Artikel führt Sie hauptsächlich in das relevante Wissen über das Schlüsselwort self in PHP ein. Der Artikel stellt es anhand von Beispielcodes ausführlich vor und hat einen gewissen Referenzwert. Ich hoffe, dass er für alle hilfreich ist.
Vorwort
Jemand hat nach der Verwendung des Schlüsselworts self gefragt, und die Antwort ist relativ offensichtlich : statische Member Sie können dies nicht verwenden, um Nicht-Member-Funktionen innerhalb einer Funktion aufzurufen, aber Sie können self verwenden, um statische Member-Funktionen/Variablen/Konstanten aufzurufen. Andere Member-Funktionen können self verwenden, um statische Member-Funktionen und nicht statische Member-Funktionen aufzurufen. Während sich die Diskussion vertieft, stellt sich heraus, dass das Selbst nicht so einfach ist. 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 Eltern, statisch und diesem
Um sich selbst vollständig zu verstehen, müssen Sie das Selbst von Eltern, statisch und diesem verstehen Dies Unterscheiden. Nachfolgend werden Vergleiche angestellt.
parent
Die Unterscheidung zwischen self und parent ist relativ einfach: parent bezieht sich auf die versteckte Methode (oder Variable) der übergeordneten Klasse/Basisklasse. und self bezieht sich auf die Self-Methode (oder Variable). Beispielsweise wird der Konstruktor der übergeordneten Klasse im Konstruktor aufgerufen:
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
static Der allgemeine Zweck von static besteht darin, Funktionen oder Variablen zu ändern Machen Sie sie zu Klassenfunktionen und Klassenvariablen. Sie können Variablen auch innerhalb einer Funktion ändern, um ihren Lebenszyklus auf den Lebenszyklus der gesamten Anwendung auszudehnen. Aber seine Assoziation mit sich selbst ist eine neue Verwendung, die seit PHP 5.3 eingeführt wurde: statische verzögerte Bindung.
Mit der statischen Verzögerungsbindungsfunktion von static kann die zugehörige Klasse zur Laufzeit dynamisch bestimmt werden. Zum Beispiel:
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();
Die Programmausgabe lautet wie folgt:
Basiskonstruktor!
Untergeordneter Konstruktor!
Basis-Foo!
Untergeordnetes Foo!
Child Foo!
In Bezug auf Funktionsreferenzen besteht der Unterschied zwischen self und static darin, dass self auf die aktuelle Klasse des Codes verweist und static auf den Aufruf Klasse; für nicht statische Mitgliedsfunktionen unterdrückt sich selbst den Polymorphismus, zeigt auf die Mitgliedsfunktion der aktuellen Klasse, statisch ist äquivalent dazu und dynamisch zeigt auf die Funktion der aufrufenden Klasse.
Es ist interessant, die drei Schlüsselwörter parent, self und static zusammen zu sehen. Sie verweisen jeweils auf die übergeordnete Klasse, die aktuelle Klasse und die Unterklasse, die eine Art „Vergangenheit, Gegenwart und Zukunft“ haben „Geschmack.
dieses
selbst und dies sind die am häufigsten diskutierten Kombinationen und werden auch am häufigsten missbraucht. Die Hauptunterschiede zwischen den beiden sind wie folgt:
Nachdem man die Unterschiede zu den oben genannten drei Schlüsselwörtern gelesen hat, ist der Zweck des Selbst sofort offensichtlich? Um es in einem Satz zusammenzufassen: self zeigt immer auf „die aktuelle Klasse (und Klasseninstanz)“. Im Detail:
Slots
$class = static::class; return $this instanceof $class; // 或者这样: return $this instanceof static;
Das obige ist der detaillierte Inhalt vonErfahren Sie mehr über das Schlüsselwort self in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!