interface 接口 和多态的含义
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);