Klassenvererbung ist sehr wichtig. Als Programmierer beschäftigt man sich im Grunde jeden Tag damit, aber weiß man einige Dinge wirklich? Das Folgende ist, was Sie auf der offiziellen Website sehen können.
Eine Klasse kann das Schlüsselwort „extends“ in der Deklaration verwenden, um die Methoden und Eigenschaften einer anderen Klasse zu erben. PHP unterstützt keine Mehrfachvererbung, eine Klasse kann nur von einer Basisklasse erben.
Geerbte Methoden und Eigenschaften können überschrieben werden, indem sie mit demselben Namen neu deklariert werden. Wenn die übergeordnete Klasse jedoch beim Definieren einer Methode final verwendet, kann die Methode nicht überschrieben werden. Auf überschriebene Methoden oder Eigenschaften kann über parent:: zugegriffen werden.
Beim Überschreiben einer Methode müssen die Parameter konsistent sein, andernfalls gibt PHP eine Fehlermeldung der Stufe E_STRICT aus. Die Ausnahme ist Constructor, der beim Überschreiben unterschiedliche Parameter verwenden kann.
Jeder muss die Grundkonzepte kennen, aber ich habe in dem Projekt nie final und parent:: verwendet, was beschämend ist.
Im Folgenden geht es hauptsächlich um die Verwendung dieser beiden Schlüsselwörter.
Finales Schlüsselwort
Ein neues Schlüsselwort in PHP 5. Wenn eine Methode in der übergeordneten Klasse als final deklariert wird, kann die Unterklasse die Methode nicht überschreiben. Ebenso kann eine als final deklarierte Klasse nicht vererbt werden.
Es ist zu beachten, dass Eigenschaften nicht als endgültig definiert werden können, sondern nur Klassen und Methoden als endgültig definiert werden können.
Bereichsauflösungsoperator (::)
Bereichsauflösungsoperator oder einfacher ein Doppelpunktpaar, kann verwendet werden, um auf statische Mitglieder, Klassenkonstanten usw. zuzugreifen kann verwendet werden, um Eigenschaften und Methoden in einer Klasse zu überschreiben.
Die drei speziellen Schlüsselwörter self, parent und static werden verwendet, um auf ihre Eigenschaften oder Methoden innerhalb der Klassendefinition zuzugreifen.
Wenn eine Unterklasse eine Methode in ihrer übergeordneten Klasse überschreibt, ruft PHP die überschriebene Methode in der übergeordneten Klasse nicht auf. Ob die Methode der übergeordneten Klasse aufgerufen wird, hängt von der untergeordneten Klasse ab. Dieser Mechanismus funktioniert auch für Konstruktoren und Destruktoren, Überladungen und magische Methoden.
Das Folgende ist ein Beispiel für den Aufruf einer Methode einer übergeordneten Klasse:
<?php class MyClass { protected function myFunc() { echo "MyClass::myFunc()\n"; } } class OtherClass extends MyClass { // 覆盖了父类的定义 public function myFunc() { // 但还是可以调用父类中被覆盖的方法 parent::myFunc(); echo "OtherClass::myFunc()\n"; } } $class = new OtherClass(); $class->myFunc(); /** * 输出结果 -> * MyClass::myFunc() * OtherClass::myFunc() */ ?>
Wenn Sie diese Elemente außerhalb der Klassendefinition referenzieren, verwenden Sie den Klassennamen.
::class Seit PHP 5.5 kann das Schlüsselwort class auch zur Auflösung von Klassennamen verwendet werden. Mit ClassName::class können Sie eine Zeichenfolge erhalten, die den vollständig qualifizierten Namen der Klasse ClassName enthält. Dies ist besonders nützlich für Klassen, die den Namespace verwenden. Dies sind möglicherweise Themen, die in Zukunft diskutiert werden müssen. Jetzt verwenden wir immer noch PHP5.3.
Um ehrlich zu sein, sind einige Schlüsselwörter in kleinen Projekten wirklich schwierig zu verwenden, aber ich denke, es ist trotzdem notwendig, mehr darüber zu wissen. Insbesondere wenn Sie einige Klassenbibliotheken von Drittanbietern verwenden, können Sie immer etwas lernen, wenn Sie deren Programmlogik im Detail studieren. Auch wenn man manche Dinge vergisst, wenn man sie längere Zeit nicht benutzt, sind sie doch einem durch den Kopf gegangen und werden für den Rest des Lebens immer Spuren hinterlassen.
Lassen Sie mich zum Schluss ohne weitere Umschweife einen Codeausschnitt teilen, der den Bereichsanalyseoperator (::) verwendet, damit Sie ihn erleben können:
<?php class cA { /** * 直接使用的测试属性的默认值 */ protected static $item = 'Foo'; /** * 间接使用的测试属性的默认值 */ protected static $other = 'cA'; public static function method() { print self::$item."\r\n"; print self::$other."\r\n"; } public static function setOther($val) { self::$other = $val; } } class cB extends cA { /** * 重定义测试属性的默认值 */ protected static $item = 'Bar'; public static function setOther($val) { self::$other = $val; } /** * 不重新声明 method()方法 */ } class cC extends cA { /** * 重定义测试属性的默认值 */ protected static $item = 'Tango'; public static function method() { print self::$item."\r\n"; print self::$other."\r\n"; } /** * 不重新声明 setOther()方法 */ } class cD extends cA { /** * 重定义测试属性的默认值 */ protected static $item = 'Foxtrot'; /** * 不重新声明 任何方法来实现上述过程 */ } cB::setOther('cB'); // cB::method()! cB::method(); // cA::method()! cC::setOther('cC'); // cA::method()! cC::method(); // cC::method()! cD::setOther('cD'); // cA::method()! cD::method(); // cA::method()! /** * 输出结果 -> * Foo * cB * Tango * cC * Foo * cD */ ?>
PHP erweitert das Codebeispiel für die Klassenvererbung:
< ?php class a{ public $x; public $y; function construct($x=0,$y=0){ $this->x=$x; $this->y=$y; } function getx(){ return $this->x; } function gety(){ return $this->y; } function destruct(){} } class a2 extends a{} /*extends是一个继承函数*/ $b2=new a2(10,10); echo $b2->getx()."<br>"; echo $b2->gety(); ?>
Die obige Einführung umfasst alle Implementierungsschritte von PHP und erweitert die Klassenvererbung.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der PHP-Vererbungsklassenerweiterungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!