Heim  >  Artikel  >  Backend-Entwicklung  >  Parsen des PHP-Schlüsselworts self

Parsen des PHP-Schlüsselworts self

步履不停
步履不停Original
2019-06-27 16:25:252587Durchsuche

Parsen des PHP-Schlüsselworts self

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

und 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

Mit der statischen verzögerten Bindungsfunktion von

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();
Die Programmausgabe lautet wie folgt:

Base constructor!
Child constructor!
Base Foo!
Child Foo!
Child Foo!
In Bezug auf Funktionsreferenzen besteht der Unterschied zwischen

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

  1. kann nicht in statischen Mitgliedsfunktionen verwendet werden, this kann self
  2. auf statische Mitgliedsfunktionen/-variablen zugreifen,
  3. Es wird empfohlen, für anstelle von self zu verwenden, oder $this::; $this-> kann nicht für den Zugriff auf nicht statische Mitgliedsvariablen verwendet werden, sondern nur
  4. ;
  5. selfthis Zu verwenden, wenn das Objekt instanziiert wurde,
  6. hat diese Einschränkung nicht;
  7. this wird innerhalb einer nicht statischen Mitgliedsfunktion verwendet, self unterdrückt polymorphes Verhalten und verweist auf die aktuelle Klassenfunktion; und die
  8. -Referenz ruft die Override-Funktion der Klasse auf (falls vorhanden). Die Verwendung von
  9. selfthis

Nachdem Sie die Unterschiede zu den oben genannten drei Schlüsselwörtern gelesen haben, ist die Verwendung von self sofort ersichtlich? Um es in einem Satz zusammenzufassen:

zeigt immer auf „die aktuelle Klasse (und Klasseninstanz)“. Im Detail:

selfself ersetzt den Klassennamen und verweist auf statische Mitgliedsvariablen und statische Funktionen der aktuellen Klasse;

    unterdrückt polymorphes Verhalten und bezieht sich auf Funktionen der aktuellen Klasse anstelle von Unterklassen . Implementierung der Abdeckung;
  1. Slots

Unter diesen Schlüsselwörtern muss nur

mit dem Symbol
    hinzugefügt werden Störung bedeutet, dass es sehr unangenehm ist. ;
  1. thisStatische Mitgliedsfunktionen können keine nicht statischen Mitgliedsfunktionen über $ aufrufen, aber sie können über
  2. aufgerufen werden und können trotzdem reibungslos ausgeführt werden, ohne
  3. zu verwenden in der aufrufenden Funktion. Dieses Verhalten scheint sich in verschiedenen PHP-Versionen unterschiedlich zu verhalten. Es ist in den aktuellen $this->self::-Ausgaben $this-> in statischen Funktionen und nicht statischen Funktionen in Ordnung. Sie sind alle
  4. , die Ausgabe des Puzzles wird
  5. selfstring(4) "self"
  6. grammatikalische Fehler enthalten, aber die folgenden zwei Schreibweisen sind normal:
  7. $class = static::class;
    return $this instanceof $class;
    // 或者这样:
    return $this instanceof static;

    Also, warum ist das so? Das? ! return $this instanceof static::class;

    Weitere PHP-bezogene technische Artikel finden Sie in der Spalte
  8. PHP-Tutorial
, um mehr darüber zu erfahren!

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!

Stellungnahme:
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

In Verbindung stehende Artikel

Mehr sehen