首頁 >後端開發 >php教程 >php中的介面與抽象類別及介面與抽象類別的區別

php中的介面與抽象類別及介面與抽象類別的區別

L
L轉載
2020-05-28 09:46:562883瀏覽

php中的介面與抽象類別及介面與抽象類別的區別

在php中介面抽象類別、Final、Static幾個我們用到的相當簡單的特別是大型網站架構時都會有用到了,今天我們來看一篇關於php中抽象類別、Final、Static的例子。

1. 介面
(1)對介面的使用是透過關鍵字implements
(2)介面無法定義成員變數(包含類別靜態變數),能定義常數
(3 )子類別必須實作介面定義的所有方法
(4)介面只能定義不能實作該方法
(5)介面沒有建構子
(6)介面中的方法和實作它的類別默認都是public型別的
2. 抽象類別
(1)對抽象類別的使用是透過關鍵字extends
(2)不能被實例化,可以定義子類別必須實現的方法
(3)子類別必須定義父類別中的所有抽象方法,這些方法的存取控制必須和父類別中一樣(或更為寬鬆)
(4)如一個類別中有一個抽象方法,則該類必須定義為抽象類別
(5)抽象類別可以有建構子
(6)抽象類別中的方法可以使用private,protected,public來修飾。
(7)一個類別可以同時實作多個接口,但一個類別只能繼承於一個抽象類別。
3. Final類別/方法
(1)final類別不能被繼承
(2)final方法不能被重寫
4. Static類別/方法
(1)可以不實例化類別而直接存取
(2)靜態屬性不可以由物件透過->運算子來存取,用::方式呼叫

<?php 
# 接口
interface Human{ 
    const TEST_CONST = "test const"; // 定义常量
    // public $v; // error,不能定义变量 
    // static $count; // error,不能定义变量 
    public function speak(); 
    public function walk(); 
    public function run(); 
} 
# 抽象类
abstract class Father implements Human{
    public function construct(){ 
        echo "father init n"; 
    }
    abstract public function walk(); // 抽象方法
    public function speak(){ 
        echo "father speak skill n";
    }
    public function run(){
        echo "father run skill n"; 
    }
} 
# 非抽象类
class Mother implements Human{
    public function construct(){
        echo "mother init n";
    }
    # 这里必须实现walk方法 
    public function walk(){ 
        echo "mother walk skill n"; 
    }
    public function speak(){
         echo "mother speak skill n"; 
    }
    public function run(){ 
        echo "mother run skill n"; 
    } 
}
class Son extends Father{ 
    public function walk(){
         echo "son walk skill. n"; 
    }
    public function speak($name = &#39;&#39;){
         echo "son: ". $name ." speak skill. n"; 
    }
    # 访问控制必须和父类中一样(或者更为宽松) 
    protected function sport(){ 
        echo "son sport skill. n"; 
    }
    final public function notTeach(){ 
        echo &#39;son has not to teach skill&#39;; 
    } 
}
 
class Daughter extends Mother{
    public function run($name = &#39;&#39;){ 
        echo "daughter run skill. n"; 
    }
}
final class GrandChild extends Son{
    # 访问控制必须和父类中一样(或者更为宽松) 
    public function sport(){ 
        echo "GrandChild sport skill. n"; 
    }
    # Cannot override final method Son::notTeach() 
    // public function notTeach(){} // error 
}
 
#  Class Orphan may not inherit from final class (GrandChild) 
// class Orphan extends GrandChild{}  // error
$son = new Son(); 
$son->speak("Suly"); 
$daughter = new Daughter(); 
$daughter->run(&#39;Lily&#39;);
$grandChild = new GrandChild();
$grandChild->sport();

抽象類別和介面的區別

1.對介面的使用是透過關鍵字implements。對抽象類別的使用是透過關鍵字extends。當然介面也可以透過關鍵字extends繼承。
2、介面中不可以宣告成員變數(包括類別靜態變數),但是可以宣告類別常數。抽象類別中可以宣告各種類型成員變量,實作資料的封裝。 (另JAVA介面中的成員變數都要宣告為public static final型別)
3、介面沒有建構函數,抽象類別可以有建構子。

4、介面中的方法預設都是public類型的,而抽象類別中的方法可以使用private,protected,public來修飾。

5、一個類別可以同時實作多個接口,但一個類別只能繼承於一個抽象類別。

抽象類別還是介面
如果要建立一個模型,這個模型將由一些緊密相關的物件採用,就可以使用抽象類別。如果要建立將由一些不相關物件採用的功能,就使用介面。
如果必須從多個來源繼承行為,就使用介面。
如果知道所有類別都會共享一個公共的行為實現,就使用抽象類,並在其中實現該行為。

推薦教學:《PHP教學

以上是php中的介面與抽象類別及介面與抽象類別的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:php学习网。如有侵權,請聯絡admin@php.cn刪除