Heim > Backend-Entwicklung > PHP-Tutorial > Sprechen Sie kurz über die verzögerte statische Bindung von PHP

Sprechen Sie kurz über die verzögerte statische Bindung von PHP

高洛峰
Freigeben: 2023-03-04 10:46:02
Original
975 Leute haben es durchsucht

Verwendungsszenarien

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

Ausgabe:

object(aClass)#1 (0) { } object(bClass)#1 (0) { }
Nach dem Login kopieren
Nach dem Login kopieren

Die oben genannten aClass und bClass erben von der abstrakten Klassenbasis, aber in Die statische Methode create() ist in 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());
Nach dem Login kopieren

Der aktuelle Code scheint mit unseren vorherigen Ideen übereinzustimmen. Lassen Sie uns ihn 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());
Nach dem Login kopieren

Dieser Code ist fast derselbe wie der vorherige. Der Unterschied besteht darin, dass self durch das Schlüsselwort static ersetzt wird, anstatt als Unterklasse eine übergeordnete Klasse, damit 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) { }
Nach dem Login kopieren
Nach dem Login kopieren

Weitere Artikel, die sich einfach mit PHP-verzögerter statischer Bindung befassen, finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage