Home > Article > Backend Development > Detailed explanation of how PHP implements parent calling parent class instance
The example of this article describes how PHP implements parent to call the parent class's constructor method and the overridden method. Share it with everyone for your reference. The specific analysis is as follows:
Overwrite: redesigned.
When defining a constructor in a subclass, you need to pass parameters to the constructor of the parent class, otherwise we may get an incompletely constructed object.
To call the method of the parent class, you must first find a way to reference the class itself: handle. PHP provides the parent keyword for this purpose.
parent Call the constructor method of the parent class
To refer to a class instead of an object method, you can use:: (two colons) instead of -> .
So, parent::construct() means calling the construct() method of the parent class.
Modify the code in the previous article "Using Class Inheritance to Solve Code Duplication and Other Problems" so that each class only processes its own data:
The code is as follows:
<?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; } } ?>
Each subclass will call the constructor of the parent class before setting its own properties. The base class (parent class) now only knows its own data, and we should try to avoid telling the parent class any information about the subclass. This is a rule of thumb. Think about it if the information of a certain subclass should be "confidential" , as a result, the parent class knows its information, and other subclasses can inherit it, so that the subclass's information is not kept confidential.
parent calls the overridden method of the parent class
The parent keyword can be used in any method that overrides the parent class. When overriding a method of a parent class, we do not want to delete the function of the parent class, but extend it. This can be achieved by calling the method of the parent class in the current object.
Looking at the above code, you can find that a lot of code is repeated in the getSummaryLine() method in the two subclasses. We should make use of the existing functions in the ShopProduct class instead of repeated development:
The code is as follows:
// 父类: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; }
We have completed the "core" function for the getSummaryLine() method in the parent class ShopProduct, and then simply call the parent class method in the subclass, and then add more data to the summaryString, the expansion of the method is realized.
The above is the detailed content of Detailed explanation of how PHP implements parent calling parent class instance. For more information, please follow other related articles on the PHP Chinese website!