Heim Backend-Entwicklung PHP-Tutorial Detaillierte Erklärung des Schlüsselworts self in PHP

Detaillierte Erklärung des Schlüsselworts self in PHP

Jun 06, 2020 pm 05:52 PM

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!
Nach dem Login kopieren

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();
Nach dem Login kopieren

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;
Nach dem Login kopieren

所以这是为什么啊?!

$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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

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.

Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Apr 06, 2025 am 12:02 AM

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.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

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? Wie debugge ich den CLI -Modus in PhpStorm? Apr 01, 2025 pm 02:57 PM

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 ...

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

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 ...

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

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.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

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 � ...

See all articles