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

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

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

  • 相关阅读:
    相交链表 3种方法
    旋转数组 空间复杂度为O(1) 的2 种方法 + 1种空间复杂度O(n)
    各种sort排序总结
    我写过的bug...
    裸BFS题若干
    luence
    mysql 找出外键等约束
    mysql (8.0 或以下)数据 卸载, 安装, 创建用户, 赋权
    navicat 导入sql文件 的正确方法
    [转] git clone 远程分支
  • 原文地址:https://www.cnblogs.com/freeweb/p/4642480.html
Copyright © 2020-2023  润新知