php面向對象基礎二(繼承、多態、封裝)

php面向對象基礎二

1. 接口

 在php編程語言中接口是一個抽象類型,是抽象方法的集合。接口通常以interface來聲明。一個類通過實現接口的方式,從而來實現接口的方法(抽象方法)。

接口定義:

interface InterAnimal{
        public function speak();
        public function name($name);
    }

//接口實現
 class cat implements InterAnimal{
        public function speak(){
            echo "speak";
        }
        public function name($name){
            echo "My name is ".$name;
        }
    }

特別注意:

  • 類全部爲抽象方法(不需要聲明abstract)
  • 接口抽象方法是public
  • 成員(字段)必須是常量

2. 繼承

 繼承自另一個類的類被稱爲該類的子類。這種關係通常用父類和孩子來比喻。子類將繼
承父類的特性。這些特性由屬性和方法組成。子類可以增加父類之外的新功能,因此子類也
被稱爲父類的“擴展”。

 在PHP中,類繼承通過extends關鍵字實現。繼承自其他類的類成爲子類或派生類,子
類所繼承的類成爲父類或基類。

class Computer {
    private $_name = '聯想';
    public function __get($_key) {
        return $this->$_key;
    }
    public function run() {
        echo '父類run方法';
    }
}
class NoteBookComputer extends Computer {
}
$notebookcomputer = new NoteBookComputer ();
$notebookcomputer->run ();  //繼承父類中的run()方法
echo $notebookcomputer->_name;  //通過魔法函數__get()獲得私有字段

特別注意:

有時候並不需要父類的字段和方法,那麼可以通過子類的重寫來修改父類的字段和方法。

class Computer {
    public $_name = '聯想';
    protected function run() {
        echo '我是父類';
    }
}
//重寫其字段、方法
class NoteBookComputer extends Computer {
    public $_name = 'IBM';
    public function run() {
        echo '我是子類';
    }
}

通過重寫調用父類的方法

有的時候,我們需要通過重寫的方法裏能夠調用父類的方法內容,這個時候就必須使用

語法:父類名::方法()、parent::方法()即可調用。

final關鍵字可以防止類被繼承,有些時候只想做個獨立的類,不想被其他類繼承使用。

3. 多態

多態是指OOP 能夠根據使用類的上下文來重新定義或改變類的性質或行爲,或者說接口的多種不同的實現方式即爲多態。

interface Computer {
    public function version();
    public function work();
}

class NotebookComputer implements Computer {
    public function version() {
        echo '聯想<br>';
    }
    public function work() {
        echo '筆記本正在隨時攜帶運行!';
    }
}

class desktopComputer implements Computer {
    public function version() {
        echo 'IBM';
    }
    public function work() {
        echo '臺式電腦正在工作站運行!';
    }
}

class Person {
    public function run($type) {
        $type->version ();
        $type->work ();
    }
}

$person = new Person ();
$desktopcomputer = new desktopComputer ();
$notebookcomputer = new NoteBookComputer ();
$person->run ( $notebookcomputer );

4. 抽象類和方法

抽象類特性:

  • 抽象類不能產生實例對象,只能被繼承;
  • 抽象方法一定在抽象類中,抽象類中不一定有抽象方法;
  • 繼承一個抽象類時,子類必須重寫父類中所有抽象方法;
  • 被定義爲抽象的方法只是聲明其調用方式(參數),並不實現。
abstract class Computer {
    abstract function run();
}

final class NotebookComputer extends Computer {
    public function run() {
        echo '抽象類的實現';
    }
}
發佈了42 篇原創文章 · 獲贊 56 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章