Heim  >  Artikel  >  Backend-Entwicklung  >  Erfahren Sie mehr über das Schlüsselwort self in PHP

Erfahren Sie mehr über das Schlüsselwort self in PHP

青灯夜游
青灯夜游nach vorne
2020-04-15 09:15:022085Durchsuche

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.

Erfahren Sie mehr über das Schlüsselwort self in PHP

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:

  1. dies kann nicht in statischen Mitgliedsfunktionen verwendet werden, self kann
  2. Um auf statische Mitgliedsfunktionen/-variablen zuzugreifen, wird die Verwendung empfohlen self statt $ This:: oder $this-> form
  3. Um auf nicht-statische Mitgliedsvariablen zuzugreifen, kann nur this verwendet werden; Wenn das Objekt instanziiert wurde, unterliegt self nicht dieser Einschränkung.
  4. wird innerhalb einer nicht statischen Member-Funktion verwendet zur Override-Funktion der aufrufenden Klasse (sofern 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 verweist auf statische Mitgliedsvariablen und statische Funktionen der aktuellen Klasse;
  1. unterdrückt polymorphes Verhalten und bezieht sich auf Funktionen der aktuellen Klasse anstelle von Unterklassen . Implementierung der Abdeckung;

Slots

Unter diesen Schlüsselwörtern muss nur Folgendes hinzugefügt werden: Das $-Symbol muss hinzugefügt werden, was bei einer Zwangsstörung sehr unangenehm ist.
  1. Statische Mitgliedsfunktionen können nicht statische Mitgliedsfunktionen nicht über $this-> aufrufen, aber sie können über self:: aufgerufen werden nicht in der aufrufenden Funktion verwendet Es kann auch dann reibungslos ausgeführt werden, wenn $this-> verwendet wird. Dieses Verhalten scheint sich in verschiedenen PHP-Versionen unterschiedlich zu verhalten. Es ist in der aktuellen Version 7.3 in Ordnung. Erraten Sie, was das Ergebnis ist. Sie sind alle string(4) „self“, was eine verwirrende Ausgabe ist;
  2. return $this instanceof static::class; es wird Syntaxfehler geben, aber die folgenden zwei Schreibweisen sind normal:
  3. $class = static::class;
    return $this instanceof $class;
    // 或者这样:
    return $this instanceof static;
  4. Warum ist das so? !
  5. Empfohlenes Lernen:
PHP-Video-Tutorial

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen