php接口和多态的概念以及简单应用

接口

PHP类是单继承,也就是不支持多继承,当一个类需要多个类的功能时,继承就无能为力了,为此PHP引入了接口技术

如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是public权限的,那么这种特殊的抽象类就叫接口

接口使用interface关键字定义,并使用implements来实现接口的方法,且必须完全实现

接口是面向对象中的一个重要特性,也是面向对象开发不可缺少的一个概念,下面简单说一下接口的概念,先看一段简单的代码:

interface ICanEat {
   public function eat($food);
}

//Human类实现了ICanEat接口
class Human implements ICanEat { 
  public function eat($food){
    echo "Human eating " . $food . "
"; } } // Animal类也实现了ICanEat接口 class Animal implements ICanEat { public function eat($food){ echo "Animal eating " . $food . "\n"; } } // 不同的类可以实现同一个接口,定义接口方法的不同实现 $man = new Human(); $man->eat("Apple"); $monkey = new Animal(); $monkey->eat("Banana"); // 实现了某个接口的类必须提供接口中定义的方法 // 不能用接口创建对象,但是能够判断某个对象是否实现了某个接口 //$eatObj = new ICanEat(); var_dump($man instanceof ICanEat); // 判断某个对象是否实现了某个接口 function checkEat($obj){ //定义方法判断对象是否实现某个接口 if($obj instanceof ICanEat){ $obj->eat('Apple'); }else{ echo "The Cant't eat"; } } checkEat($man); checkEat($monkey); // 接口可以继承接口 interface ICanDrink extends ICanEat { public function drink(); } class Human1 implements ICanDrink{ public function pee(){} public function eat($food){} }

代码比较乱,重点就是那么一点,首先我们定义一个接口ICanEat,定义的语句是interface ICanEat{},里面可以定义一些方法,这些方法必须是public公有的类型,并且这个方法不用具体的实现,接下来定义了两个类Human和Animal,都实现了ICanEat这个接口,就是都能吃东西,只不过具体吃的方法不太一样,这就是接口的意义所在,即定义一些通用的方法好多类都同时实现这些方法,但是实现的方法不一样,接口的作用就在于此,要注意,接口中定义的所有方法,实现接口的类中必须全部实现,不能实现其中几个,只能全部实现,checkEat方法是判断某个对象是否实现了一个接口。

另外不能用接口创建对象,或者说这种说法是错误的,只能说类实现了接口,对象实现了接口,这是个实现的关系

接口是可以继承接口的,比如ICanDrink可以喝,虽然不是太合适,语句是:interface ICanDrink extends ICanEat{}这里面定义了方法drink,这样就实现了接口的继承

然后定义了类Human1实现了ICanDrink接口,那么这个类必须实现ICanDrink接口以及父接口ICanEat中的所有方法,就是说实现接口必须实现接口中的所有方法以及父接口所有的方法

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

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

联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2024

备案号:京ICP备15003423号-3