首頁 >後端開發 >php教程 >php物件導向之繼承、多型、封裝簡介

php物件導向之繼承、多型、封裝簡介

小云云
小云云原創
2018-03-02 09:49:152359瀏覽

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. 抽象類別與方法
抽象類別特性:
* 抽象類別不能產生實例對象,只能被繼承;
* 抽象方法一定在抽象類別中,抽象類別中不一定有抽象方法;
* 繼承抽象類別時,子類別必須重寫父類別中所有抽象方法;
* 被定義為抽象的方法只是聲明其呼叫方式(參數),並不實現。

abstract class Computer {
    abstract function run();}final class NotebookComputer extends Computer {
    public function run() {
        echo '抽象类的实现';
    }
}

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

相關推薦:

PHP物件導向之標識物件

php物件導向程式設計的開發思路與實例分析

PHP物件導向實用基礎知識

#

以上是php物件導向之繼承、多型、封裝簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn