相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
php開發(fā)過程中關(guān)于繼承的使用方法分享
通常需要這樣一些類,這些類與其它現(xiàn)有的類擁有相同變量和函數(shù)。實際上,定義一個通用類用于所有的項目,并且不斷豐富這個類以適應(yīng)每個具體項目將是一個不 錯的練習(xí)。
繼承
通常需要這樣一些類,這些類與其它現(xiàn)有的類擁有相同變量和函數(shù)。實際上,定義一個通用類用于所有的項目,并且不斷豐富這個類以適應(yīng)每個具體項目將是一個不 錯的練習(xí)。為了使這一點(diǎn)變得更加容易,類可以從其它的類中擴(kuò)展出來。擴(kuò)展或派生出來的類擁有其基類(這稱為“繼承”,只不過沒人死)的所有變量和函數(shù),并 包含所有派生類中定義的部分。類中的元素不可能減少,就是說,不可以注銷任何存在的函數(shù)或者變量。一個擴(kuò)充類總是依賴一個單獨(dú)的基類,也就是說,不支持多 繼承。使用關(guān)鍵字“extends”來擴(kuò)展一個類。
<?php
class test {
public function __construct() {
}
public function name() {
$this->xname('John');
}
private function showName($name) {
echo 'my name in test is '.$name;
}
}
class extendTest extends test {
public function __construct() {
parent::__construct();
}
private function showName($name) {
echo 'my name in extendTest is '.$name;
}
}
$test = new extendTest();
$test->name();
?>
上述示例定義了名為 Named_Cart 的類,該類擁有 Cart 類的所有變量和函數(shù),加上附加的變量 $owner 和一個附加函數(shù) set_owner()?,F(xiàn)在,以正常的方式創(chuàng)建了一個有名字的購物車,并且可以設(shè)置并取得該購物車的主人。而正常的購物車類的函數(shù)依舊可以在有名字的購 物車類中使用:
<?php
$ncart = new Named_Cart; // 新建一個有名字的購物車
$ncart->set_owner("kris"); // 給該購物車命名
print $ncart->owner; // 輸出該購物車主人的名字
$ncart->add_item("10", 1); // (從購物車類中繼承來的功能)
?>
這個也可以叫做“父-子”關(guān)系。創(chuàng)建一個類,父類,并使用 extends 來創(chuàng)建一個基于父類的新類:子類。甚至可以使用這個新的子類來創(chuàng)建另外一個基于這個子類的類。
Note:
類只有在定義后才可以使用!如果需要類 Named_Cart 繼承類 Cart,必須首先定義 Cart 類。如果需要創(chuàng)建另一個基于 Named_Cart 類的 Yellow_named_cart 類,必須首先定義 Named_Cart 類。簡捷的說:類定義的順序是非常重要的。
class Person{
protected $name;//protected保護(hù)的權(quán)限,在子類可以訪問,外部不能訪問
protected $age;
protected $sex;
function __construct($name,$age,$sex){
$this->name=$name;//當(dāng)使用this時,就算name沒有聲明,也會再次聲明一個
$this->age=$age;
$this->sex=$sex;
echo "###############";
}
public function say(){
echo "我的名字:{$this->name},我的年齡{$this->age}:,我的性別:{$this->sex}<br/>";
}
protected function eat(){
echo "wwwwwwwwwwwwwwwwwwwww<br>";
}
function run(){
}
protected $name;//protected保護(hù)的權(quán)限,在子類可以訪問,外部不能訪問
protected $age;
protected $sex;
}
//繼承
class Student extends Person{
var $school;
function __construct($name,$age,$sex,$school){
parent::__construct();//調(diào)用父類的構(gòu)造方法
$this->school=$school;
}
//重載say()方法,進(jìn)行擴(kuò)展
protected function say(){//父類使用public,子類的權(quán)限不能低于父類,可以喝父類的權(quán)限相同
//Person::say();//調(diào)用父類的say()方法
parent::say();//調(diào)用父類say()方法,parent代表父類名,當(dāng)父類名變化時也能夠調(diào)用。
echo "我所在的學(xué)校{$this->school}<br/>";//www.3ppt.com
}
function study(){
echo "{$this->name}在學(xué)習(xí)<br/>";
}
}
$s=new Student("zhangsan",23,"男");
$s->say();
$s->study();
* 1.面向?qū)ο蟮娜筇匦灾?nbsp;
*
* 2.開放性、可擴(kuò)充性
*
* 3.增加代碼的重用性
*
* 4.提高了軟件的可維護(hù)性
*
* 5.繼承就是用子類去“擴(kuò)展”父類
*
* C++ 屬于多繼承,同一個類可以有多個父類
*
* PHP和JAVA屬于單繼承,同一個類只能有一個父類
*
* 不管是多繼承或者單繼承,都可以有多個子類
*
* 只要你在設(shè)計兩個類時,有可以共享的成員,就將可以共享的內(nèi)容單獨(dú)作為一個基類使用
*
* 一、類繼承的應(yīng)用
*
* 1.聲明一個子類,使用extends關(guān)鍵字去繼承(擴(kuò)展)一個父類
*
* 2.子類可以從父類中繼承所有的內(nèi)容,包括成員屬性方法,構(gòu)造方法......,在子類中都可以使用
*
* 二、訪問類型控制
*
* 雖然子類可以從父類中繼承所有內(nèi)容,但私有的private成員,只能在本類中使用,子類中也不能使用
*
* 封裝時,既可以讓自己類的內(nèi)部可以訪問,也讓子類可以用,但類的外部不能使用,只要將權(quán)限設(shè)置為protected
*
*
*
* 三、子類中重載父類的方法
*
* 1.子類可以聲明可以聲明和父類相同的方法名,即子類覆蓋了父類同名的方法
*
* 2.子類的方法對父類方法的擴(kuò)展
*
* 3.在子類中調(diào)用父類中被覆蓋的方法
* 使用 父類名::方法名() parent::方法名()
*
* 4.在子類中編寫構(gòu)造方法,如果父類中也有構(gòu)造方法,一定要去調(diào)用一次父類中被覆蓋的構(gòu)造方法
*
* 注意:子類中重載的方法,不能低于父類中訪問權(quán)限(子類可以放大權(quán)限,但不能縮小權(quán)限)
復(fù)制代碼代碼如下:
<?php
class test {
public function __construct() {
}
public function name() {
$this->xname('John');
}
private function showName($name) {
echo 'my name in test is '.$name;
}
}
class extendTest extends test {
public function __construct() {
parent::__construct();
}
private function showName($name) {
echo 'my name in extendTest is '.$name;
}
}
$test = new extendTest();
$test->name();
?>
上述示例定義了名為 Named_Cart 的類,該類擁有 Cart 類的所有變量和函數(shù),加上附加的變量 $owner 和一個附加函數(shù) set_owner()?,F(xiàn)在,以正常的方式創(chuàng)建了一個有名字的購物車,并且可以設(shè)置并取得該購物車的主人。而正常的購物車類的函數(shù)依舊可以在有名字的購 物車類中使用:
<?php
$ncart = new Named_Cart; // 新建一個有名字的購物車
$ncart->set_owner("kris"); // 給該購物車命名
print $ncart->owner; // 輸出該購物車主人的名字
$ncart->add_item("10", 1); // (從購物車類中繼承來的功能)
?>
這個也可以叫做“父-子”關(guān)系。創(chuàng)建一個類,父類,并使用 extends 來創(chuàng)建一個基于父類的新類:子類。甚至可以使用這個新的子類來創(chuàng)建另外一個基于這個子類的類。
Note:
類只有在定義后才可以使用!如果需要類 Named_Cart 繼承類 Cart,必須首先定義 Cart 類。如果需要創(chuàng)建另一個基于 Named_Cart 類的 Yellow_named_cart 類,必須首先定義 Named_Cart 類。簡捷的說:類定義的順序是非常重要的。
復(fù)制代碼代碼如下:
class Person{
protected $name;//protected保護(hù)的權(quán)限,在子類可以訪問,外部不能訪問
protected $age;
protected $sex;
function __construct($name,$age,$sex){
$this->name=$name;//當(dāng)使用this時,就算name沒有聲明,也會再次聲明一個
$this->age=$age;
$this->sex=$sex;
echo "###############";
}
public function say(){
echo "我的名字:{$this->name},我的年齡{$this->age}:,我的性別:{$this->sex}<br/>";
}
protected function eat(){
echo "wwwwwwwwwwwwwwwwwwwww<br>";
}
function run(){
}
protected $name;//protected保護(hù)的權(quán)限,在子類可以訪問,外部不能訪問
protected $age;
protected $sex;
}
//繼承
class Student extends Person{
var $school;
function __construct($name,$age,$sex,$school){
parent::__construct();//調(diào)用父類的構(gòu)造方法
$this->school=$school;
}
//重載say()方法,進(jìn)行擴(kuò)展
protected function say(){//父類使用public,子類的權(quán)限不能低于父類,可以喝父類的權(quán)限相同
//Person::say();//調(diào)用父類的say()方法
parent::say();//調(diào)用父類say()方法,parent代表父類名,當(dāng)父類名變化時也能夠調(diào)用。
echo "我所在的學(xué)校{$this->school}<br/>";//www.3ppt.com
}
function study(){
echo "{$this->name}在學(xué)習(xí)<br/>";
}
}
$s=new Student("zhangsan",23,"男");
$s->say();
$s->study();
* 1.面向?qū)ο蟮娜筇匦灾?nbsp;
*
* 2.開放性、可擴(kuò)充性
*
* 3.增加代碼的重用性
*
* 4.提高了軟件的可維護(hù)性
*
* 5.繼承就是用子類去“擴(kuò)展”父類
*
* C++ 屬于多繼承,同一個類可以有多個父類
*
* PHP和JAVA屬于單繼承,同一個類只能有一個父類
*
* 不管是多繼承或者單繼承,都可以有多個子類
*
* 只要你在設(shè)計兩個類時,有可以共享的成員,就將可以共享的內(nèi)容單獨(dú)作為一個基類使用
*
* 一、類繼承的應(yīng)用
*
* 1.聲明一個子類,使用extends關(guān)鍵字去繼承(擴(kuò)展)一個父類
*
* 2.子類可以從父類中繼承所有的內(nèi)容,包括成員屬性方法,構(gòu)造方法......,在子類中都可以使用
*
* 二、訪問類型控制
*
* 雖然子類可以從父類中繼承所有內(nèi)容,但私有的private成員,只能在本類中使用,子類中也不能使用
*
* 封裝時,既可以讓自己類的內(nèi)部可以訪問,也讓子類可以用,但類的外部不能使用,只要將權(quán)限設(shè)置為protected
*
*
*
* 三、子類中重載父類的方法
*
* 1.子類可以聲明可以聲明和父類相同的方法名,即子類覆蓋了父類同名的方法
*
* 2.子類的方法對父類方法的擴(kuò)展
*
* 3.在子類中調(diào)用父類中被覆蓋的方法
* 使用 父類名::方法名() parent::方法名()
*
* 4.在子類中編寫構(gòu)造方法,如果父類中也有構(gòu)造方法,一定要去調(diào)用一次父類中被覆蓋的構(gòu)造方法
*
* 注意:子類中重載的方法,不能低于父類中訪問權(quán)限(子類可以放大權(quán)限,但不能縮小權(quán)限)