接口使用场景
单接口
接口可以突破PHP类的继承限制,允许多继承,形成了多层级的接口
用抽象类来部分实现一个接口
接口是实现多态的重要手段
<?php interface Animal { const MOTION = 'fly'; public function eatFood(); } abstract class Flying { abstract public function fly(); } class Bird extends Flying implements Animal { public function eatFood() { return __CLASS__.'吃虫子'.',拥有技能:'.Bird::MOTION.'<br>'; } public function fly() { return '我可以飞行'; } } $bird = new Bird; echo $bird->eatFood(); echo $bird->fly();
2trait:与抽象类,接口一样不能实例化,只能嵌入到宿主类中使用
<?php trait tUniversity { protected $area; protected $totalPeroson; public function setIntroduce($area,$totalPeroson){ $this->area = $area; $this->totalPeroson = $totalPeroson; } public function getIntroduce(){ echo '占地面积:'.$this -> area.'校园总人数:'.$this -> totalPeroson.'<br>'; } } class Peking { use tUniversity; } $peking = new Peking(); $area = '约7000亩'; $totalPeroson = '三万五千多'; $peking->setIntroduce($area,$totalPeroson); $peking->getIntroduce(); class Tsinghua { use tUniversity; } $tsingHua = new Tsinghua; $area = '392.4公顷'; $totalPeroson = '四万七千多'; $tsingHua->setIntroduce($area,$totalPeroson); $tsingHua->getIntroduce();
总结:接口中只允许有抽象方法以及常量,接口中的方法默认就是抽象的,它的抽象类的一种升级,抽象类中还可以有其他属性;trait很好的实现了代码的复用,trait中可以有常规属性、静态属性以及抽象属性。