PHP面向对象之接口详解(代码实例)
本文目标:
1、理解PHP中接口的定义
2、理解PHP中接口的作用
3、理解PHP中接口的使用处景
4、理解PHP中接口的详细实现
还是秉承此前一向的学习思绪,我们学习一个知识,还是按照3w1h的思绪来学习
(一)、理解PHP中接口的定义(What)
定义:接口就是把不一样类的 共同业为
停止了定义,然后在不一样的类里面实现不一样的功效
或者我们可以懂得成它是对事物的一种统一标准,它规定了某个事物必需是什么行动,比方人这个接口,它就规定了人必需要具备的一些办法,比方吃、喝、拉、撒、走路、说话、瞬间睛、睡觉、思索等,缺少任何一个行动都不是一个正常的人了
(二)、理解PHP中接口的作用(Why)
作用:
1、标准代码:定义接口有益于代码的标准:特殊是关于一些大型项目而言,有了统一的接口后,一方面开发人员能有一个清楚的认识,一看接口就知道他们详细要实现哪些业务;同时也能防止由于开发人员随便命名而致使的命名不清楚和代码纷乱,影响开发效力。
2、提高的代码的可保护性:比方你要做一个分销商城程序,其中里面有一个分销类,主要负责分销功效,刚开端的时候你大概会把你刚开端想到的一些分销功效都封装到这个分销类里面。可是随着时间的推移,你之后大概会发明现有的类已经不克不及够知足你的新的需求,然后你就需要从新设计这个类,但是最坏的状况是你会发明此刻这个类仿佛基本就没什么用了,但是代码的其他地方有大概还会援用这个类,假如完全去修改,会致使非常费事。但是假如一开端你把它定义成一个接口,把分销的一些主要功效放在接口里,然后再别的定义一个分销类时去详细的实现这些接口,然后你只需要用这个接口去援用已经实现这个接口的相关的类就可以了,就算今后要换的话只不外是援用另一个类罢了,这样就可以提高代码的可保护性和可拓展性。
3、让代码更具备高内聚,低耦合的原则
(三)、理解PHP中接口的使用处景(Where)
场景:结合它的作用,使用处景根本上如下
1、假如为了包管一个类更具标准性,我们可认为这个类定义一个接口,那么所有继承这个接口的所有类,都必需要实现接口里定义的办法
2、假如但愿提高代码的可保护性,可重用性和可扩展性,我们也可以思考它,特殊是在参与开发大型项目的时候,必然要先思考好,哪些接口需要先定义好,这样就等同于先把标准肯定好了,标准肯定好了,分工合作的时候,效力才会晋升
(四)、理解PHP中接口的详细实现(How)
总结:
1、接口的定义 interface 接口名称{ }
2、接口里面的办法 是没有{},也就是说里面的办法是没有详细的实现部分
3、类实现接口的定义 通过关键字implements,比方 class A implements 接口{}
4、类一旦要实现某个接口,就必需要实现接口定义好的所有办法
5、接口不克不及被实例化
6、通过instanceof 来推断某个类的实例是不是实现了一个接口,比方A对象实例 instanceof B接口
假如返回true,就表示A对象实例对应的类 是实现了B接口
7、通过extends可以让一个接口 继承 别的一个接口
8、当一个类要实现一个子接口时,它不仅要实现子接口里面的办法,同时也要实现父接口的所有办法
每个总结都是通过实践得来的,下面我们一一来通过详细的代码来演示上面的总结
(五)、详细代码
1、案例一
实践目标:
1、接口的定义 interface 接口名称{ }
2、接口里面的办法 是没有{},也就是说里面的办法是没有详细的实现部分
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } ?>
运转结果:是空白的说明没有报错
2、案例二
实践目标:
1、类要实现一个接口的定义 通过关键字implements,比方 class A implements 接口{}
2、类一旦要实现某个接口,就必需要实现接口定义好的所有办法
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } //定义实现接口的类 class Monkey implements Action{ //一旦要实现一个接口,就必需要实现接口里面的所有办法 public function eat(){} public function walk(){} public function sleep(){} } $monkey = new Monkey(); ?>
没有实现接口的办法的运转结果为:
Fatal error: Class Monkey contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (Action::eat, Action::walk, Action::sleep) in D:\E-class\class-code\classing\index.php on line 11
实现了接口的运转结果为:
空白说明是准确的
3、案例三
实践目标:
1、接口不克不及被实例化
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } $action = new Action(); ?>
运转结果为:
Fatal error: Uncaught Error: Cannot instantiate interface Action in D:\E-class\class-code\classing\index.php:9 Stack trace: #0 {main} thrown in D:\E-class\class-code\classing\index.php on line 9
4、案例四
实践目标:
1、通过instanceof 来推断某个类的实例是不是实现了一个接口,比方A对象实例 instance of B接口
假如返回true,就表示A对象实例对应的类 是实现了B接口
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } //定义实现接口的类 class Monkey implements Action{ public function eat(){} public function walk(){} public function sleep(){} } $monkey = new Monkey(); print_r( $monkey instanceof Action ); ?>
运转结果为:1
5、案例五
实践目标:
1、通过extends可以让一个接口 继承 别的一个接口
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } //接口继承 interface HigherAction extends Action{ public function talk(); public function think(); } ?>
6、案例六
实践目标:
1、当一个类要实现一个子接口时,它不仅要实现子接口里面的办法,同时也要实现父接口的所有办法
<?php //接口定义 interface Action{ public function eat(); public function walk(); public function sleep(); } //接口继承 interface HigherAction extends Action{ public function talk(); public function think(); } //定义实现子接口的类 class Human implements HigherAction{ public function eat(){} public function talk(){} public function walk(){} public function sleep(){} public function think(){} } $human = new Human(); ?>
当Human类只实现HigherAction的2个办法的时候,运转结果为:
Fatal error: Class Human contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (HigherAction::think, Action::walk, Action::sleep) in D:\E-class\class-code\classing\index.php on line 14
当Human类实现了HigherAction和Action的所有办法的时候,运转结果为:
空白,说明是准确的
(六)、学乃至用
问题:分销系统也许对许多人来说都不生疏,但是分销系统也有许多品种,比方常见的不违法有2级分销,轻微有点违法的就是3级分销,其实还有更多冗杂的分销系统,但是不管是哪种分销系统,他们都有相似的办法,我们但愿把这些办法做成一个接口,然后详细如何实现,就交由2级分销和3级分销2个类,如何做?
思绪剖析:
1、先想好分销的公共办法
2、把这些办法封装到分销接口中
3、定义2个类,让这2个类离别去实现这个分销接口
详细代码:
<?php //分销接口定义 interface Commission{ //猎取会员的直接上级 public function getParent($uid); //猎取会员的当期级别 public function getLevel($uid); //猎取会员的累计佣金 public function getTotalCommission($uid); //猎取会员当期可提现佣金 public function getCurrCommission($uid); //猎取会员的累计提现佣金 public function getTotalApplyPrice($uid); } //2级分销 class TwoLevelCommission implements Commission{ //猎取会员的直接上级 public function getParent($uid){} //猎取会员的当期级别 public function getLevel($uid){} //猎取会员的累计佣金 public function getTotalCommission($uid){} //猎取会员当期可提现佣金 public function getCurrCommission($uid){} //猎取会员的累计提现佣金 public function getTotalApplyPrice($uid){} } //3级分销 class ThreeLevelCommission implements Commission{ //猎取会员的直接上级 public function getParent($uid){} //猎取会员的当期级别 public function getLevel($uid){} //猎取会员的累计佣金 public function getTotalCommission($uid){} //猎取会员当期可提现佣金 public function getCurrCommission($uid){} //猎取会员的累计提现佣金 public function getTotalApplyPrice($uid){} } ?>
(七)、总结
1、本文主如果讲了接口的定义和作用乃至实现
但愿本文能给大家带来必然的帮忙,感谢!!!
以上就是PHP面向对象之接口详解(代码实例)的具体内容,更多请关注百分百源码网其它相关文章!