PHP面向对象 高级实践(下)

1.接口

  • 接口就是把不同的类的共同行为进行了定义,然后在不同的类里面实现了不同的功能
  • 一旦某个类实现了某个接口,那么就必须实现接口定义的方法
<?php
//interface关键字用于定义接口
interface ICanEat{
    //接口里面的方法不需要有方法的实现
    public function eat($food);
}
//implements 关键字用于表示类实现某个接口
class Human implements ICanEat{
    //实现了某个接口之后,必须提供接口定义中方法的具体实现
    public function eat($food){
        echo "Human eat '$food' ";
    };
}

class Animal implements ICanEat{
    //实现了某个接口之后,必须提供接口定义中方法的具体实现
    public function eat($food){
        echo "Animal eat '$food' ";
    };
}


$obg=new Human();
$obg->eat('Apple');
$obg=new Animal();
$obg->eat('Banana');

$eatObg=new ICanEat();
//报错 不能对于接口进行实例化

可以用instanceof关键字来判断某个对象是否实现了某个接口
echo $obg instanceof ICanEat  ;   //true


//可以用extends关键字让接口继承接口
interface ICanPee extends ICanEat{
    public function pee();

}

//当类实现子接口时,父接口定义的方法也需要在这个类里面具体实现
class Human1 implements ICanPee{
    //
    public function pee(){};
    public function eat(){};
}


 

某个类实现了某个接口与继承了某个类的区别

  • 实现接口和继承类很类似,但是接口不能直接创建自己的对象
  • 继承的父类必须有该方法的具体实现,子类可以重写父类的方法,也可以不重写
  • 接口里面的方法是不需要具体实现的,只要定义了方法名称和参数就可以了,具体的实现必须在实现类中定义
  • 一句话概括:【类的方法必须有实现,接口的方法必须为空】

2.多态

因为接口的方法实现可以有很多,所以对于接口里面定义的方法的具体实现是多种多样的,这种特性我们成为多态。

  • 比如接口A有两个实现B和C,B和C对A里面定义的方法的实现可以是不同的,这种现象就是多态。

 3.抽象类

<?php
//abstract关键字用于定义抽象类
abstract class ACanEat{
    //在抽象方法前面添加abstract关键字可以标明这个方法是抽象方法,不需要具体实现
    abstract public function eat($food);
    //抽象类中可以包含普通的方法,有方法的具体实现
    public function breath(){
        echo "Breath use the air ";
    }
}

//类继承抽象类的关键字是extends 
class Human extends ACanEat{
    //继承抽象类的子类需要实现抽象类中定义的抽象方法
    public function eat($food){
        echo "Human eating '$food' ";
    }
}

class Animal extends ACanEat{
    public function eat($food){
        echo "Animal eating '$food' ";
    }
}

$man=new Human();
$man->eat('Apple');
$man->breath();//和Animal共用了抽象类中的breath()


$mokey=new Animal();
$mokey->eat('Banana');
$mokey->breath();
?>

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值