PHP-verzögerte statische Bindung: Bezieht sich auf das Selbst der Klasse, das nicht auf dem Definitionszeitpunkt, sondern auf den laufenden Ergebnissen während der Berechnung basiert.
(1) Wenn das von der Unterklasse instanziierte Objekt $stu die Methode say aufruft, wird sie in der übergeordneten Klasse Human ausgeführt, sodass self::hei() in say() die hei() der übergeordneten Klasse ist . )Methode.
(2) static::method name(): Wenn Sie das Schlüsselwort static verwenden, suchen Sie zuerst in der Unterklasse nach der Methode. Wenn sie nicht gefunden wird, suchen Sie sie in der übergeordneten Klasse.
Nutzungsszenario
Beobachten Sie zunächst den folgenden Code:
abstract class base { //do sth } class aClass extends base{ public static function create(){ return new aClass(); } } class bClass extends base{ public static function create(){ return new bClass(); } } var_dump(aClass::create()); var_dump(bClass::create());
Ausgabe:
object(aClass)#1 (0) { } object(bClass)#1 (0) { }
Die oben genannten aClass und bClass erben von der abstrakten Klassenbasis, aber die statische Methode create() ist auch in den beiden Unterklassen implementiert. Gemäß der Oop-Idee sollte diese Art von wiederholtem Code in der Basis der übergeordneten Klasse implementiert werden.
Verbesserter Code
abstract class base { public static function create(){ return new self(); } } class aClass extends base{ } class bClass extends base{ } var_dump(aClass::create()); var_dump(bClass::create());
Der aktuelle Code scheint mit unseren vorherigen Ideen übereinzustimmen, und die Methode create() wird im übergeordneten Element gemeinsam genutzt Klasse Okay, lassen Sie es uns ausführen und sehen, was passiert.
Abstrakte Klassenbasis kann nicht instanziiert werden in ...
Leider scheint der Code nicht wie erwartet zu laufen, self() in der übergeordneten Klasse wird als Basis dieser übergeordneten Klasse analysiert Die Klasse erbt nicht von ihren Unterklassen. Um dieses Problem zu lösen, wurde in PHP5.3 das Konzept der verzögerten statischen Bindung eingeführt.
Verzögerte statische Bindung
abstract class base { public static function create(){ return new static(); } } class aClass extends base{ } class bClass extends base{ } var_dump(aClass::create()); var_dump(bClass::create());
Dieser Code ist fast derselbe wie der vorherige. Der Unterschied besteht darin, dass self durch das Schlüsselwort static ersetzt wird. static Es wird in eine Unterklasse statt in eine übergeordnete Klasse aufgelöst, sodass die oben aufgetretenen Probleme gelöst werden können. Dies ist die verzögerte statische Bindung von PHP.
Führen Sie abschließend den Code aus und erhalten Sie das gewünschte Endergebnis.
object(aClass)#1 (0) { } object(bClass)#1 (0) { }
Das obige ist der detaillierte Inhalt vonWas ist PHP-verzögerte statische Bindung? Detaillierte Erläuterung des Beispielcodes für verzögerte statische Bindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!