PHP 使用關(guān)鍵字?extends?來(lái)繼承一個(gè)類,PHP 不支持多繼承,格式如下:
Child繼承Parent的類
class Child extends Parent {
// 代碼部分
}
實(shí)例
實(shí)例中 Child_Site 類繼承了 Site 類,并擴(kuò)展了功能:
<?php
// 子類擴(kuò)展站點(diǎn)類別
class Child_Site extends Site {
var $category;
????function setCate($par){
????????$this->category = $par;
????}
????function getCate(){
????????echo $this->category . PHP_EOL;
????}
}
方法重寫(xiě)
如果從父類繼承的方法不能滿足子類的需求,可以對(duì)其進(jìn)行改寫(xiě),這個(gè)過(guò)程叫方法的覆蓋(override),也稱為方法的重寫(xiě)。
重寫(xiě)前site
類中的方法
function getUrl(){
echo $this->url . PHP_EOL;
}
function getTitle(){
echo $this->title . PHP_EOL;
}
實(shí)例中重寫(xiě)了Child_Site
類中, getUrl
與 getTitle
方法:
function getUrl() {
echo $this->url . PHP_EOL;
return $this->url;
}
function getTitle(){
echo $this->title . PHP_EOL;
return $this->title;
}
子類繼承父類的屬性和方法
子類繼承父類的屬性和方法,也就是說(shuō)子類擁有父類所有的東西,包括 public(公有)、protected(保護(hù))和private(私有)的。
但是父類私有的屬性和方法不能讓子類直接調(diào)用,并不是說(shuō)沒(méi)有繼承過(guò)來(lái),而是繼承過(guò)來(lái)了,但是要調(diào)用父類的私有屬性和方法的話還是需要通過(guò)父類的 public、protected 方法調(diào)用。
<?php
class father {
public function __construct(){
echo "父類構(gòu)造函數(shù),如果子類沒(méi)有重寫(xiě)構(gòu)造函數(shù)將會(huì)調(diào)用這里。如果子類重寫(xiě)了構(gòu)造函數(shù)則子類不用自動(dòng)調(diào)用這個(gè)函數(shù),而需要顯示調(diào)用父類構(gòu)造函數(shù)。";
}
public $m_fa="fa"; //公有
protected $m_fb="fb";//受保護(hù)
private $m_fc="fc"; //私有
public function getFa(){ echo $m_fa;}
protected function getFb(){return $m_fb;}
private function getFc(){return $m_fc;}
public function getFaPrivate_1(){return $m_fc;}
public function getFaPrivate_2(){return $m_fc;}
public function getAll(){
echo $this->m_fa, $this->m_fb, $this->m_fc;//此行代碼打印fafbfc
echo $this->getFa(), $this->getFb(), $this->getFc();
}
}
class son extends father{
public function __construct(){
parent::__construct(); //顯示調(diào)用父類構(gòu)造函數(shù)。
echo "子類構(gòu)造函數(shù)調(diào)用";
}
}
$class_fa = 'father';
$class_son = 'son';
$fa = new $class_fa();//父類 - father類的實(shí)例化
$fa->getAll();
$son = new $class_son();//子類 - son類的實(shí)例化
$son->getFa();
// 執(zhí)行以下方法會(huì)報(bào)錯(cuò),protected 無(wú)法在類外面進(jìn)行調(diào)用的
// 報(bào)錯(cuò)信息:Fatal error: Uncaught Error: Call to protected method father::getFb()...
// $son->getFb();
// 執(zhí)行以下方法會(huì)報(bào)錯(cuò),private 無(wú)法被繼承,也無(wú)法在類外面進(jìn)行調(diào)用的
// 報(bào)錯(cuò)信息:Fatal error: Uncaught Error: Call to private method father::getFc()...
// $son->getFc();
$son->getFaPrivate_2();//私有類成員只能被其定義所在類中訪問(wèn)
?>
子類繼承父類構(gòu)造方法
子類繼承帶有參數(shù)的父類的構(gòu)造方法:
class students{
var $name,$age,$sex;
function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
}
class master extends students{
var $hobby,$address;
function __construct($name, $age, $sex,$hobby,$address){
parent::__construct($name, $age, $sex);
$this->hobby = $hobby;
$this->address = $address;
}
}