php 繼承詳解

來源:互聯網
上載者:User

繼承
通常需要這樣一些類,這些類與其它現有的類擁有相同變數和函數。實際上,定義一個通用類用於所有的項目,並且不斷豐富這個類以適應每個具體項目將是一個不錯的練習。為了使這一點變得更加容易,類可以從其它的類中擴充出來。擴充或派生出來的類擁有其基類(這稱為“繼承”,只不過沒人死)的所有變數和函數,並包含所有衍生類別中定義的部分。類中的元素不可能減少,就是說,不可以登出任何存在的函數或者變數。一個擴充類總是依賴一個單獨的基類,也就是說,不支援多繼承。使用關鍵字“extends”來擴充一個類。

<?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 類的所有變數和函數,加上附加的變數 $owner 和一個增益集函數 set_owner()。現在,以正常的方式建立了一個有名字的購物車,並且可以設定並取得該購物車的主人。而正常的購物車類的函數依舊可以在有名字的購物車類中使用:

<?php
$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;

 function __construct($name,$age,$sex){
  $this->name=$name;//當使用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保護的許可權,在子類可以訪問,外部不能訪問
 protected $age;
 protected $sex;
}

//繼承
class Student extends Person{
 var $school;

 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}<br/>";
 }

 function study(){
  echo "{$this->name}在學習<br/>";
 }

}

$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.在子類中編寫構造方法,如果父類中也有構造方法,一定要去調用一次父類中被覆蓋的構造方法
 *
 * 注意:子類中重載的方法,不能低於父類中存取權限(子類可以放大許可權,但不能縮小許可權)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.