繼承與方法重寫 – PHP面向對象編程(OOP)

    類中常用操作,很重要

    PHP 使用關鍵字?extends?來繼承一個類,PHP 不支持多繼承,格式如下:

    Child繼承Parent的類

    class Child extends Parent {
       // 代碼部分
    }

    實例

    實例中 Child_Site 類繼承了 Site 類,并擴展了功能:

    <?php 
    // 子類擴展站點類別
    class Child_Site extends Site {
       var $category;
    
    ????function setCate($par){
    ????????$this->category = $par;
    ????}
      
    ????function getCate(){
    ????????echo $this->category . PHP_EOL;
    ????}
    }

    方法重寫

    如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。

    重寫前site類中的方法

     function getUrl(){
         echo $this->url . PHP_EOL;
      }
      
      
      function getTitle(){
         echo $this->title . PHP_EOL;
      }

    實例中重寫了Child_Site類中, getUrl getTitle 方法:

    function getUrl() {
       echo $this->url . PHP_EOL;
       return $this->url;
    }
       
    function getTitle(){
       echo $this->title . PHP_EOL;
       return $this->title;
    }

    子類繼承父類的屬性和方法

    子類繼承父類的屬性和方法,也就是說子類擁有父類所有的東西,包括 public(公有)、protected(保護)和private(私有)的。

    但是父類私有的屬性和方法不能讓子類直接調用,并不是說沒有繼承過來,而是繼承過來了,但是要調用父類的私有屬性和方法的話還是需要通過父類的 public、protected 方法調用。

    <?php
    
    class father {
    
        public function __construct(){
            echo "父類構造函數,如果子類沒有重寫構造函數將會調用這里。如果子類重寫了構造函數則子類不用自動調用這個函數,而需要顯示調用父類構造函數。";
        }
    
        public $m_fa="fa";    //公有
        protected $m_fb="fb";//受保護
        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(); //顯示調用父類構造函數。
            echo "子類構造函數調用";
        }
    }
    
    $class_fa = 'father';
    $class_son = 'son';
    $fa = new $class_fa();//父類 - father類的實例化
    $fa->getAll();
    $son = new $class_son();//子類 - son類的實例化
    $son->getFa();
    // 執行以下方法會報錯,protected 無法在類外面進行調用的
    // 報錯信息:Fatal error: Uncaught Error: Call to protected method father::getFb()...
    // $son->getFb();
    // 執行以下方法會報錯,private 無法被繼承,也無法在類外面進行調用的
    // 報錯信息:Fatal error: Uncaught Error: Call to private method father::getFc()...
    // $son->getFc();
    
    $son->getFaPrivate_2();//私有類成員只能被其定義所在類中訪問
    ?>

    子類繼承父類構造方法

    調用父類構造方法 – PHP面向對象編程(OOP)

    子類繼承帶有參數的父類的構造方法:

    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;
        }
    }

    參考文章

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優惠劵
    搜索
    主站蜘蛛池模板: 国产一区二区三区在线2021| 精品中文字幕一区在线| 亚洲AV无码一区二区三区在线观看| 中文字幕Av一区乱码| 国产一区二区三区在线免费观看| 人妻无码久久一区二区三区免费| 无码毛片一区二区三区中文字幕| 亚洲一区二区三区深夜天堂| av在线亚洲欧洲日产一区二区| 无码日韩精品一区二区三区免费| 中文字幕Av一区乱码| 亚洲国产AV一区二区三区四区| 波多野结衣的AV一区二区三区| 在线精品亚洲一区二区| 亚洲无删减国产精品一区| 中文字幕在线观看一区二区 | 精品国产亚洲第一区二区三区| 亚洲日本一区二区三区在线| 日韩人妻精品无码一区二区三区| 亚洲国产激情在线一区| 99精品高清视频一区二区| 狠狠综合久久av一区二区| 91在线精品亚洲一区二区| 亚洲色精品vr一区二区三区| 日本夜爽爽一区二区三区| 国产成人av一区二区三区在线 | 无人码一区二区三区视频| 在线视频国产一区| 无码丰满熟妇浪潮一区二区AV| tom影院亚洲国产一区二区| 国产精品视频免费一区二区| 精品人无码一区二区三区 | 精品国产一区二区三区2021| 在线观看视频一区二区| 午夜性色一区二区三区不卡视频| 一本大道在线无码一区| 亚洲一区二区精品视频| 一区二区三区免费看| 91福利国产在线观看一区二区| 日韩精品电影一区亚洲| 中文字幕乱码一区二区免费|