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('Content-type:text/html;charset=utf-8'); // 从这篇开始,类名首字母一律大写,规范写法 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; } } ?>
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; }
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!