Ausführliche Erklärung, wie PHP die Instanz der übergeordneten aufrufenden übergeordneten Klasse implementiert

伊谢尔伦
Freigeben: 2023-03-13 08:22:02
Original
2107 Leute haben es durchsucht

Das Beispiel in diesem Artikel beschreibt, wie PHP parent implementiert, um die Konstruktormethode der übergeordneten Klasse und die überschriebene Methode aufzurufen. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:

Überschreiben: neu gestaltet.

Wenn Sie einen Konstruktor in einer Unterklasse definieren, müssen Sie Parameter an den Konstruktor der übergeordneten Klasse übergeben, sonst erhalten wir möglicherweise ein unvollständig konstruiertes Objekt.

Um die Methode der übergeordneten Klasse aufzurufen, müssen Sie zunächst eine Möglichkeit finden, auf die -Klasse selbst zu verweisen: handle PHP stellt hierfür das parent-Schlüsselwort bereit.

parent ruft die Konstruktormethode der übergeordneten Klasse auf

Um auf eine Klasse anstelle einer Objektmethode zu verweisen, können Sie :: (zwei Doppelpunkte) anstelle von - verwenden. >

parent::construct() bedeutet also, dass die Methode construction() der übergeordneten Klasse aufgerufen wird.

Ändern Sie den Code im vorherigen Artikel „Verwenden der Klassenvererbung zur Lösung von Codeduplikation und anderen Problemen“, sodass jede Klasse nur ihre eigenen Daten verarbeitet:

Der Code lautet wie folgt:

<?php
header(&#39;Content-type:text/html;charset=utf-8&#39;);
// 从这篇开始,类名首字母一律大写,规范写法
class ShopProduct{    // 声明类
public $title; // 声明
属性
public $producerMainName;
public $producerFirstName;
public $price;
function construct($title,$firstName,$mainName,$price){
$this -> title = $title;    // 给属性 title 赋传进来的值
$this -> producerFirstName= $firstName; 
$this -> producerMainName = $mainName; 
$this -> price= $price; 
}
function getProducer(){    // 声明方法
return "{$this -> producerFirstName }"."{$this -> producerMainName}";
}
function getSummaryLine(){
$base = "{$this->title}( {$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
return $base;
}
}
class CdProduct extends ShopProduct {
public $playLenth;
function construct($title,$firstName,$mainName,$price,$playLenth){
parent::construct($title,$firstName,$mainName,$price);
$this -> playLenth= $playLenth;
}
function getPlayLength(){
return $this -> playLength;
}
function getSummaryLine(){
$base = "{$this->title}( {$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
$base .= ":playing time - {$this->playLength} )";
return $base;
}
}
// 定义类
class BookProduct extends ShopProduct {
public $numPages;
function construct($title,$firstName,$mainName,$price,$numPages){
parent::construct($title,$firstName,$mainName,$price);
$this -> numPages= $numPages;
}
function getNumberOfPages(){
return $this -> numPages;
}
function getSummaryLine(){
$base = "{$this->title}( {$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
$base .= ":page cont - {$this->numPages} )";
return $base;
}
}
 
?>
Nach dem Login kopieren


Jede Unterklasse ruft den Konstruktor der übergeordneten Klasse auf, bevor sie ihre eigenen Eigenschaften festlegt. Die Basisklasse (übergeordnete Klasse) kennt jetzt nur ihre eigenen Daten, und wir sollten versuchen, der übergeordneten Klasse keine Informationen über die Unterklasse mitzuteilen. Dies ist eine Faustregel. Denken Sie darüber nach, ob die Informationen einer bestimmten Unterklasse sein sollten. vertraulich" Dadurch kennt die übergeordnete Klasse ihre Informationen und andere Unterklassen können sie erben, sodass die Informationen der Unterklasse nicht vertraulich behandelt werden.

parent ruft die überschriebene Methode der übergeordneten Klasse auf

Das Schlüsselwort parent kann in jeder Methode verwendet werden, die die übergeordnete Klasse überschreibt. Beim Überschreiben einer Methode einer übergeordneten Klasse möchten wir die Funktion der übergeordneten Klasse nicht löschen, sondern erweitern. Dies kann durch Aufrufen der Methode der übergeordneten Klasse im aktuellen Objekt erreicht werden.
Wenn Sie sich den obigen Code ansehen, können Sie feststellen, dass in der getSummaryLine()-Methode in den beiden Unterklassen viel Code wiederholt wird. Wir sollten die vorhandenen Funktionen in der ShopProduct-Klasse verwenden, anstatt sie wiederholt zu entwickeln:

Der Code lautet wie folgt:

// 父类:ShopProduct
function getSummaryLine(){
$base = "{$this->title}( {$this->producerMainName},";
$base .= "{$this->producerFirstName} )";
return $base;
}
// 子类:CdProduct
function getSummaryLine(){
$base = parent::getSummaryLine();
$base .= ":playing time - {$this->playLength} )";
return $base;
}
// 子类:BookProduct
function getSummaryLine(){
$base = parent::getSummaryLine();
$base .= ":page cont - {$this->numPages} )";
return $base;
}
Nach dem Login kopieren

Wir haben die „Kern“-Funktion für die Methode getSummaryLine() in der übergeordneten Klasse ShopProduct abgeschlossen und rufen dann einfach die Methode der übergeordneten Klasse auf Fügen Sie dann der Unterklasse weitere Daten zur Zusammenfassung String hinzu, um die Erweiterung der Methode zu realisieren.

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie PHP die Instanz der übergeordneten aufrufenden übergeordneten Klasse implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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