<?php//抽象類別-可以是空類,不能建立對象,不能執行個體化,只能被繼承abstract class absFirst{//關鍵字abstract protected $absBl = '$absBl'; //可以定義變數,關鍵字[public|protected|private] const ABSCL = 'ABS-CL';//可以定義常量 abstract function absFunFirst($cs=array());//抽象方法關鍵字abstract,可以有參數,可以有預設值,沒有方法體 public function absFunSecond(){//可以定義其他成員方法,關鍵字[public|protected|private] echo "抽象類別第一個方法,第一個變數是“{$this->absBl}”,第一個常量是“".self::ABSCL."”"; }}//介面1-可以是空的介面-不能定義變數-不能定義其他成員方法interface intFirst{//關鍵字interface const INTCLF = 'INT-CLF';//可以定義常量 public function intFunFirst($ic=array());//介面方法關鍵字public,可以有參數,可以有預設值,沒有方法體}//介面2interface intSecond{ const INTCLS = 'INT-CLS'; public function intFunSecond();}//實作類別-定義的抽象方法和介面需全部實現//實現抽象類別關鍵字extends,單一繼承//實現介面關鍵字implements,多介面class claFirst extends absFirst implements intFirst,intSecond{ //實現第一個抽象方法 public function absFunFirst($cf='第一個抽象方法'){//關鍵字只能是public,參數個數需保持一致 echo $cf."\n"; } //重寫抽象類別中的方法 public function absFunSecond(){ echo '我被重寫了'."\n"; } //實現第一個介面的第一個方法 public function intFunFirst($ic=',哈哈'){//關鍵字只能是public,參數個數需保持一致 echo '我是第一個介面方法調的是第二介面的常量'.self::INTCLS.$ic."\n"; } //實現第二個介面的第一個方法 public function intFunSecond(){//關鍵字只能是public,參數個數需保持一致 echo '我是第二個介面方法調的是第一介面的常量'.self::INTCLF."\n"; } }//使用$cf = new claFirst();$cf->absFunFirst();$cf->absFunSecond();$cf->intFunFirst();$cf->intFunSecond();/*運行結果:第一個抽象方法我被重寫了我是第一個介面方法調的是第二介面的常量INT-CLS,哈哈我是第二個介面方法調的是第一介面的常量INT-CLF*//*總結:介面是特殊的抽象類別抽象類別和介面相同點:1、都可以為空白2、都不能建立對象,不能被執行個體化3、都可以定義常量4、定義的抽象方法可以有參數,可以有預設值,沒有方法體5、實作類別需實現定義的所有抽象方法,且關鍵字為public抽象類別和介面不同點: 1、類關鍵字不同abstract && interface 2、抽象類別可以定義變數,介面不可以 3、抽象類別可以定義其他非抽象方法,介面不可以 4、抽象類別定義的抽象方法關鍵為abstract,介面定義的方法關鍵字為public 5、實現抽象類別只能單一繼承,關鍵字為extends,介面可以實現多個介面,關鍵字為implements */?>