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中的所有方法,就是说实现接口必须实现接口中的所有方法以及父接口所有的方法

总之,最核心的地方就是理解接口的作用和意义,它是提供了一些统一的方法去描述不同对象,不同对象都有其具体实现,基本就是这些东西。

至于多态呢,到这里就自然明白了,只要对象实现了某个接口,就直接可以通过对象调用接口的所有方法,接口实现的类方法有很多,这种现象就称为多态,相同的代码传入的对象不一样,所以具体实现方式也不一样,这就是多态的真正含义。

posted @ 2015-07-13 11:42  小得盈满  阅读(2549)  评论(0编辑  收藏  举报