文章出處
文章列表
1 <?php 2 //interface關鍵字用于定義接口 3 interface ICanEat{ 4 //接口里面的方法不需要方法的實現 5 public function eat($food) ; 6 } 7 //implemaents關鍵字用于表示類實現某個接口 8 class Human implements ICanEat{ 9 //實現了某個接口之后,必須提供接口中定義的方法的具體實現 10 public function eat($food) { 11 echo "Human eating ".$food."<br/>"; 12 } 13 } 14 class animal implements ICanEat{ 15 //實現了某個接口之后,必須提供接口中定義的方法的具體實現 16 public function eat($food) { 17 echo "Animal eating ".$food."<br/>"; 18 } 19 } 20 $obj=new Human(); 21 $obj->eat('Apple'); 22 23 $monkey = new Animal(); 24 $monkey->eat('Banana'); 25 26 //不能實例化接口 27 //$eatObj = new ICanEat(); 28 29 //可以使用instanceof關鍵字來判斷某個對象是否實現了某個接口 30 var_dump($obj instanceof ICanEat); 31 32 function checkEat($obj) { 33 if($obj instanceof ICanEat) { 34 $obj->eat('food'); 35 }else { 36 echo "The obj can't eat"."<br/>"; 37 } 38 } 39 40 checkEat($obj)."<br/>"; 41 checkEat($monkey); 42 43 //可以用extends讓接口繼承接口 44 interface ICanPee extends ICanEat{ 45 public function pee(); 46 } 47 //當類實現子接口時,父接口定義的方法也需要在這個類里面具體實現 48 class Human1 implements ICanPee{ 49 public function pee() {} 50 public function eat($food){} 51 }
總結:
某個類實現(implements)了某個接口和繼承(extends)了某個類的區別 --實現接口和繼承類很類似,但是接口不能直接創建自己的對象 ··如果創建了“會吃東西這個對象”,那么具體怎么吃根本不知道 --繼承的父類必須有該方法的具體實現,子類可以重寫父類的方法,也可以不重寫 接口里面的方法是不需要具體實現的,只要定義了方法的名稱和參數就可以了, --具體的實現必須在實現類中定義 --一句話概括:類的方法必須有實現,接口的方法必須為空
多態:
多態:因為接口的方法實現可以有很多種,所以對于接口里面的定義的方法具體實習是多種多樣的,這種特性我們稱為多態
比如接口A有兩個實現B和C,B和C對A里面定義的方法的實現可以是不同的,這種現象就是多態
對于上面接口的例子中
1 //相同的一行代碼,對于傳入不同的接口的實現的對象的時候,表現是不同的,這就是多態 2 checkEat($obj); 3 checkEat($monkey);
文章列表
全站熱搜