php接口和多態的概念以及簡單應用


  接口是面向對象中的一個重要特性,也是面向對象開發不可缺少的一個概念,下面簡單說一下接口的概念,先看一段簡單的代碼:

 1 interface ICanEat {
 2    public function eat($food);
 3 }
 4 
 5 //Human類實現了ICanEat接口
 6 class Human implements ICanEat { 
 7   public function eat($food){
 8     echo "Human eating " . $food . "<br />";
 9   }
10 }
11 
12 // Animal類也實現了ICanEat接口
13 class Animal implements ICanEat {
14   public function eat($food){
15     echo "Animal eating " . $food . "\n";
16   }
17 }
18 
19 // 不同的類可以實現同一個接口,定義接口方法的不同實現
20 $man = new Human();
21 $man->eat("Apple");
22 $monkey = new Animal();
23 $monkey->eat("Banana");
24 
25 
26 // 實現了某個接口的類必須提供接口中定義的方法
27 
28 // 不能用接口創建對象,但是能夠判斷某個對象是否實現了某個接口
29 //$eatObj = new ICanEat();
30 var_dump($man instanceof ICanEat); // 判斷某個對象是否實現了某個接口
31 
32 function checkEat($obj){
33   //定義方法判斷對象是否實現某個接口
34   if($obj instanceof ICanEat){
35     $obj->eat('Apple');
36   }else{
37     echo "The Cant't eat";
38   }
39 }
40 
41 checkEat($man);
42 checkEat($monkey);
43 
44 // 接口可以繼承接口
45 interface ICanDrink extends ICanEat {
46   public function drink();
47 }
48 
49 class Human1 implements ICanDrink{
50   public function pee(){}
51   public function eat($food){}
52 }

代碼比較亂,重點就是那么一點,首先我們定義一個接口ICanEat,定義的語句是interface ICanEat{},里面可以定義一些方法,這些方法必須是public公有的類型,並且這個方法不用具體的實現,接下來定義了兩個類Human和Animal,都實現了ICanEat這個接口,就是都能吃東西,只不過具體吃的方法不太一樣,這就是接口的意義所在,即定義一些通用的方法好多類都同時實現這些方法,但是實現的方法不一樣,接口的作用就在於此,要注意,接口中定義的所有方法,實現接口的類中必須全部實現,不能實現其中幾個,只能全部實現,checkEat方法是判斷某個對象是否實現了一個接口。

另外不能用接口創建對象,或者說這種說法是錯誤的,只能說類實現了接口,對象實現了接口,這是個實現的關系

接口是可以繼承接口的,比如ICanDrink可以喝,雖然不是太合適,語句是:interface ICanDrink extends ICanEat{}這里面定義了方法drink,這樣就實現了接口的繼承

然后定義了類Human1實現了ICanDrink接口,那么這個類必須實現ICanDrink接口以及父接口ICanEat中的所有方法,就是說實現接口必須實現接口中的所有方法以及父接口所有的方法

總之,最核心的地方就是理解接口的作用和意義,它是提供了一些統一的方法去描述不同對象,不同對象都有其具體實現,基本就是這些東西。

至於多態呢,到這里就自然明白了,只要對象實現了某個接口,就直接可以通過對象調用接口的所有方法,接口實現的類方法有很多,這種現象就稱為多態,相同的代碼傳入的對象不一樣,所以具體實現方式也不一樣,這就是多態的真正含義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM