繼承
通常需要這樣一些類,這些類別與其它現有的類別擁有相同變數和函數。實際上,定義一個通用類別用於所有的項目,並且不斷豐富這個類別以適應每個具體項目將是一個不 錯的練習。為了使這一點變得更加容易,類別可以從其它的類別中擴展出來。擴展或衍生出來的類別擁有其基底類別(這稱為“繼承”,只不過沒人死)的所有變數和函數,並 包含所有衍生類別中定義的部分。類別中的元素不可能減少,就是說,不可以註銷任何存在的函數或變數。一個擴充類別總是依賴一個單獨的基類,也就是說,不支援多 繼承。使用關鍵字“extends”來擴展一個類別。
複製程式碼 程式碼如下:
class test {
public function __construct() {
}
public function name() {
$this->xname('Johnprivate); name) {
echo 'my name in test is '.$name;
}
}
class extendTest extends test {
public function __construct ) {
echo 'my name in extendTest is '.$name;
}
}
$test = new extendTest();
$test->name();
> ;類,該類擁有Cart 類的所有變數和函數,加上附加的變數$owner 和一個附加函數set_owner()。現在,以正常的方式創建了一個有名字的購物車,並且可以設定並取得該購物車的主人。而正常的購物車類別的函數依舊可以在有名字的購物車類別中使用:
$ncart = new Named_Cart; // 新建一個有名字的購物車
$ncart->set_owner("kris" ); // 為該購物車命名
print $ncart->owner; // 輸出該購物車主人的名字
$ncart->add_item("10", 1); // (從購物車類別繼承來的功能)
?>
這個也可以叫做「父-子」關係。建立一個類,父類,並使用 extends 來建立一個基於父類的新類:子類。甚至可以使用這個新的子類別來創建另外一個基於這個子類別的類別。
Note:
類別只有在定義後才可以使用!如果需要類別 Named_Cart 繼承類別 Cart,則必須先定義 Cart 類別。如果需要建立另一個基於 Named_Cart 類別的 Yellow_named_cart 類,則必須先定義 Named_Cart 類別。簡捷的說:類別定義的順序是非常重要的。
複製程式碼 程式碼如下:
class Person{
protected $name;//protected保護的權限,在子類別可以訪問,外部不能存取
protected $age;
protected $sex;
protected $age;
protected $sex;
protected $age;
protected $sex; ,$sex){
$this->name=$name;//使用this時,就算name沒有聲明,也會再宣告一個
$this->age=$age;
$this->sex=$ sex;
echo "###############";
}
public function say(){
echo 「我的名字:{$this->name},我的年齡{ $this->age}:,我的性別:{$this->sex}
";
}
protected function eat(){
echo "wwwwwwwwwwww(wwwwwwwww
";
}
function run(www)w {
}
protected $name;//protected保護的權限,在子類別可以訪問,外部不能訪問
protected $age;
protected $sex;
}
//繼承
5 ext. ;
function __construct($name,$age,$sex,$school){
parent::__construct();//呼叫父類別的建構方法
$this->school=$school;
}載say()方法,進行擴充
protected function say(){//父類別使用public,子類別的權限不能低於父類別,可以喝父類別的權限相同
//Person::say();/ /呼叫父類別的say()方法
parent::say();//呼叫父類別say()方法,parent代表父類別名稱,當父類別名稱變化時也能夠呼叫。
echo "我所在的學校{$this->school}
";//m.sbmmt.com
}
function study(){
echo "{$this->name}在學習
";
}
}
$s=new Student("zhangsan",23,"男");
$s->say();
$s->study();
* 1.物件導向的三大特色之一
*
* 2.開放性、可擴充性
*
* 3.增加程式碼的重用性
*
* 4.提高了軟體的可維護性就是繼承
*
* 5.用子類別去「擴充」父類
*
* C++ 屬於多重繼承,同一個類別可以有多個父類別
*
* PHP和JAVA屬於單一繼承,而同一個類別只能有一個父類別
*
* 不管是多重繼承或單一繼承,都可以有多個子類
*
* 只要你在設計兩個類別時,有可以共享的成員,就將可以共享的內容單獨作為一個基類使用
*
* 一、類繼承的應用
*
* 1.宣告一個子類別,使用extends關鍵字去繼承(擴充)一個父類別
*
* 2.子類別可以從父類別中繼承所有的內容,包括成員屬性方法,建構方法......,在子類別中都可以使用
*
* 二、存取型別控制
*
* 雖然子類別可以從父類別繼承所有內容,但私有的private成員,且只能在本類別中使用,子類別中也不能使用
*
* 封裝時,既可以讓自己類別的內部可以存取,也讓子類別可以用,但類別的外部不能使用,只要權限設定為protected
*
*
*
* 三、子類中重載父類別的方法
*
* 1.子類別可以宣告可以宣告和父類別相同的方法名,即子類別覆寫父類別同名的方法
*
* 2.子類別的方法對父類別方法的擴充
*
* 3.在子類別中呼叫父類別中被覆寫的方法
* 使用父類別::方法名稱() parent::方法名稱()
*
* 4.在子類別中寫建構方法,如果父類別中也有建構方法,一定要去呼叫一次父類別中被覆寫的建構方法
*
* 注意:子類別中重載的方法,不能低於父類別中存取權限(子類可以放大權限,但不能縮小權限)