PHP中抽象類,介面定義

高洛峰
發布: 2016-10-09 11:35:29
原創
1280 人瀏覽過

PHP中抽象類,介面定義

這裡先介紹接口,因為在我最近看的好幾本php工具書中都沒有提到抽象類別。

本人也覺得,在理解了介面後抽象類別也非常好理解。 

範例程式碼隨便寫了一下。例子代碼是很ok的,測試過了不會報錯,懶得看代碼的筒靴們看文字一樣。栗子舉的不好。

程式碼測試環境:php5.3.29

 

介面(interface):

介面就是為抽象而生的,相當於一個約定或規範,方便框架搭建,程式碼分工。

它裡面指定了抽象方法的名稱和參數和成員常數,但不能包含任何的具體方法,變數.

個人認為php是弱型別語言,強調的是彈性。與java相比php裡的介面對型別要求太鬆弛。不大好用,不建議大量使用。

  1)介面中全部是抽象方法。 (因為要用來給子類別實作。所以都要是public或protected的。)

  2)介面中不能有具體方法,且只能有成員常數。

  3) 由於php和java c++等強型別語言不同,php是弱型別且動態型別的本身就不指定回傳類型,參數的資料型別除四種基本型別不能指定外也可寫可不寫,所以對方法傳回值和參數的型別無要求。

  4)一個類別可以實作多個介面。用法: implements關鍵字後實作多個介面用逗號隔開。

interface Car {
     const name = "车子";
        public function run($speed=400,$time=300);
}

class Xiali implements Car {
    public function run($s=100,$t=200){//参数个数必须相同
              echo '哈哈 我会跑';
              return 'abc';
       }
       
       public function fly() {
               echo '哈哈我会飞';
       }
}
登入後複製

抽象類別(abstract class):作用和介面一樣,都是為了規範子類別的功能,只是比介面多包含了具體的內容。

  1)包含至少一個抽象方法(abstract function)的類別(換言之,任何類別只要有了一個或以上的抽象方法,這個類別就必須是抽象類別。)

  2)抽象類別和介面一樣不能實例化。都叫抽象的了,還咋實例化,實例都是具體的。 2333.

  3)小結:抽象類別和普通類別兩個區別:1.至少包含一個抽象方法 2.不能實例化。別的都一樣。

  4)用法:

abstract class Father{
        abstract function func1();//至少一个抽象方法。
            
        public function func2(){//具体方法随便写。
                echo 'func2';
                $this->func3();
        }   
        private function func3(){
                echo '一个private方法';
        }   
}
登入後複製

實現繼承到的抽象方法時

/**
 * 继承抽象类
 * 必须实现其所有抽象方法
 * 和普通一样,一个类也只能继承一个抽象类
 */
class Son extends Father {
    public function func1() {
         echo '实现(重写)抽象方法。参数名个数必须相同'  
    }
}
登入後複製


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板