Detaillierte Erklärung des Schlüsselworts self in PHP
Analyse des PHP-Schlüsselworts self
Jemand in der PHP-Gruppe fragte nach der Verwendung des Schlüsselworts self und Die Antwort liegt auf der Hand:
Sie können dies nicht verwenden, um Nicht-Member-Funktionen innerhalb einer statischen Member-Funktion aufzurufen, aber Sie können self verwenden, um statische Member-Funktionen/Variablen/Konstanten aufzurufen
Andere Mitgliedsfunktionen können self verwenden, um statische Mitgliedsfunktionen und nicht statische Mitgliedsfunktionen aufzurufen.
Als sich die Diskussion vertiefte, entdeckte ich, 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.
Um das Selbst vollständig zu verstehen, müssen Sie es vom übergeordneten, statischen und diesem unterscheiden.
Das Folgende sind Vergleiche
parent
Die Unterscheidung zwischen Selbst und Eltern ist relativ einfach: Der Elternbezug auf die Elternklasse/-basis Die Klasse ist eine versteckte Methode (oder Variable), self bezieht sich auf ihre eigene Methode (oder Variable).
Zum Beispiel der Aufruf des übergeordneten Klassenkonstruktors im Konstruktor:
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 von Static besteht darin, Funktionen oder Variablen zu ändern, um sie zu Klassenfunktionen zu machen und Klassenvariablen. Sie können Variablen 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!
Child Foo!
Child Foo!
In Bezug auf Funktionsreferenzen ist der Unterschied zwischen self und static: Bei statischen Memberfunktionen verweist self auf die aktuelle Klasse des Codes. und statisch zeigt auf die aufrufende Klasse; für nicht statische Mitgliederfunktionen unterdrückt selbst 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 meisten diskutierten Kombinationen und werden auch am häufigsten missbraucht.
Der Hauptunterschied zwischen den beiden ist wie folgt:
dies kann nicht in statischen Elementen verwendet werden Funktionen, self Ja;
Für den Zugriff auf statische Memberfunktionen/-variablen wird empfohlen, self anstelle von $this:: oder $this-> zu verwenden.
Für den Zugriff auf nicht- statische Mitgliedsvariablen „Self“ können nicht verwendet werden, nur diese
diese muss verwendet werden, wenn das Objekt instanziiert wurde, self hat keine solche Einschränkung
kann innerhalb nicht statischer Mitgliedsfunktionen verwendet werden , selbstunterdrückendes Polymorphismusverhalten bezieht sich auf die Funktion der aktuellen Klasse und diese bezieht sich auf die übergeordnete Funktion der aufrufenden Klasse (falls vorhanden).
Der Zweck des Selbst
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:
ersetzt den Klassennamen und referenziert die statischen Mitgliedsvariablen und statischen Funktionen der aktuellen Klasse;
unterdrückt polymorphes Verhalten und Referenzen Funktionen der aktuellen Klasse und nicht in Unterklassen abgedeckte Implementierungen;
Slots
Unter diesen Schlüsselwörtern muss nur This hinzugefügt werden mit einem $-Zeichen und muss hinzugefügt werden, was sehr unangenehm ist.
Statische Mitgliedsfunktionen können nicht über $this-> aufgerufen werden, aber sie können über self aufgerufen werden: :, und beim Aufrufen der Funktion kann es auch ohne Verwendung von $this-> reibungslos laufen. Dieses Verhalten scheint sich in verschiedenen PHP-Versionen unterschiedlich zu verhalten, ist aber in der aktuellen Version 7.3 in Ordnung
在静态函数和非静态函数中输出self,猜猜结果是什么?都是string(4) "self",迷之输出;
return $this instanceof static::class;会有语法错误,但是以下两种写法就正常: $class = static::class; return $this instanceof $class; // 或者这样: return $this instanceof static;
所以这是为什么啊?!
$class = static::class;
return $this instanceof $class;
// 或者这样:
return $this instanceof static;
推荐教程:《PHP视频教程》
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Schlüsselworts self in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Alipay PHP ...

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...
