关于PHP中interface的用处详解_php技巧

来源:脚本之家  责任编辑:小易  

相对于接口来讲,我认为(可能是我学业不精,下面的人不要骂我)在php中优势并不是很明显,甚至有点鸡肋的味道。具体来讲是什么个意思呢?在生产环境中,如果我们需要在不同的业务逻辑类中进行切换,而这种业务逻辑类的目的是相同的,只是过程有所差异,那么为了保证在表层使用过程中让用户找不到头脑(这个主要是表现层或者是顶层了,一般来讲,接口或者基础类都是处于底层中),定义出来的.比如a.php定义(约束了一些接口)[php]interface example{public function getExample();public function setExample();}[/php]b.php[php]include \\'a.php\\';class myExample implements example {public function getExample(){?TODO.}public function setExample(){?TODO.}}[/php]c.php[php]include \\'a.php\\';class myExample implements example {public function getExample(){?TODO.}public function setExample(){?TODO.}}[/php]在这种情况下,你可以通过前端逻辑到态的加载(或者配置文件,管它呢,随你心情了)b或者c文件,你不用管b或者c中有什么不同,你所用到的只是 getExample,setExample,且他们的输出结果是一致的。管它呢,我是胡扯八扯的,表达不好,不知道看明白了没有。[[i]本帖最后由 sim 于 2009-1-9 16:53 编辑[/i]]www.zgxue.com防采集请勿采集本网。

确实,PHP 接口是有它的目的的。

在学习PHP面向对象时,都会在抽象类与接口上迷惑,作用差不多为什么还那么容易混淆,何不留一去一?但是事实上两者的区别还是很大的,如果能够很好地运用PHP的两个方法,面向对象的程序设计将会

它们是契约,是给其他开发人员的说明手册。然而,还是很难理解接口有什么用。

问这个问题,应该懂得interface怎么用的。那我就说说interface的深刻意义吧 1、这些都是思想层面的东西,现在大多数开发语言都有这些特性,在学习语言的同时,要注重思想的养成,包括面对对象

基础

接口是抽象的类,无法直接实例化,但是可被实现。

因为java 中不能定义抽象静态方法static interface中所有的成员方法都是abstract的,当然也就不能定义静态方法static。静态法多的话制作成专门的类 想Math 一样

这是一个基本的例

(2)interface 实现类及 abstract class 的子类都必须要实现已经声明的抽象方法。2.不同点: (1)interface 需要实现,要用 implements,而 abstract class 需要继承,要用 extends。(2)一个类可以实现多个

interface MyInterface {public function setName(string $name);public function getName();} class MyClass implements MyInterface {private $name; public function setName(string $name) {$this->name = $name;} public function getName() {return $this->name;}}

语法是php的语法, bakeback 表示一个变量 A()表示调用一个 名字叫A的函数, 'Interface:/ProxyCost' 是一个参数 这句话的意思就是 调用 A()函数,并且个A()函数一个'Interface:/ProxyCost' 参数,

MyClass 必须实现 setName() 和 getName() 方法。如果你不照做,你就会遇到致命错误。

Fatal error: Class MyClass contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (MyInterface::setName, MyInterface::getName)

此外,接口中定义的方法的访问性必须为公开的,并且接口中不能定义类成员。

原因

开发者使用接口来描述一个或者一组类的共同行为。

但是为什么只负责封装实现而不负责处理每个类的详细信息呢?

为了解耦!

接口允许你在不更改详细信息的情况下更改实现,也就是你使用此实现的方式。

更多高级示例

任何缓存系统都需要以下功能 存储 / 设置缓存中的内容 获取缓存中的内容 删除缓存中的内容

基于此,我们可以创建如下的缓存接口

interface CacheInterface {public function set(string $key, $val);public function get(string $key);public function delete(string $key);}

以这种方式,就可以让开发者知道需要实现缓存接口,具体怎么实现,我们不需要知道。结果就是我们可以在不修改使用方式的情况下方便地切换缓存系统

因此,在不改变缓存系统在项目中的使用方式的情况下更改缓存系统是很容易的。

Symfony 示例

我们来看刚才例子的具体应用。对于 Symfony 而言,如果你想要实现任何缓存系统,最佳实践就是按照下面的方式来做

use Symfony\Contracts\Cache\CacheInterface; class MyClass {private $cache;public function __construct(CacheInterface $cache){$this->cache = $cache;}}

通过依赖注入,将缓存接口注入到我们的类中。下次我们修改缓存系统时,MyClass 类不需要做任何的改变。

多实现 VS 多继承

PHP 不支持多继承,下面这种方式是不可能的

class MyClass extends ClassX, ClassY {}

之所以不允许这样做部分原因是由于 Diamond 问题.

不过,你可以这么做

class ClassY extends ClassX {}class MyClass extends ClassY {}

但是 ClassX 和 ClassY 可能处理不同的事情,因此使用继承没有任何意义。

如果你想要执行多种行为,那么你可以多个接口

class MyClass implements InterfaceX, InterfaceY {}

换句话说,你可以让一些类共享一部分功能而不是共享一个父类。

总结

PHP 接口是类的方法模板,这对于解耦实现及使用是非常有帮助的。

当你需要保持灵活性并确保所有开发人员都遵循一组规则时,此功能特别有用。

到此这篇关于关于PHP中interface的用处的文章就介绍到这了,更多相关PHP中interface用处内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

1、接口的定义:接口:一种成员属性为抽象的特殊抽象类,在程序中同为规范的作用2、其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这 个时候PHP接口类interface就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如:interface Shop{public function buy($gid);public function sell($gid);public function view($gid);}我声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view),那么继承此类的所有子类都必须实现这3个方法少一个都 不行,如果子类没有实现这些话,就无法运行。实际上接口类说白了,就是一个类的模板,一个类的规定,如果你属于这类,你就必须遵循我的规定,少一个都不 行,但是具体你怎么去做,我不管,那是你的事,如:class BaseShop implements Shop { public function buy($gid){ echo('你购买了ID为:'.$gid.'的商品');} public function sell($gid){ echo('你卖了ID为:'.$gid.'的商品');} public function view($gid){ echo('你查看了ID为:'.$gid.'的商品');} }结论:PHP接口类interface就是一个类的领导者,指明方向,子类必须完成它指定方法。这样不同的开发者就不要去了解别人怎么命名相应的方法。3、php中使用接口(interface)实现多重继承:我们都知道PHP中的类(class)是单继承的,那是不是就没有办法实现多重继承了呢?答案是否定的.我们可以通过其它特殊的方式实现类的多重 继承,比如使用接口(interface)实现,只要把类的特征抽象为接口,并通过实现接口的方式让对象有多重身份,通过这样就可以模拟多重继承了。下面是一个用接口(interface)实现多重继承的例子,源代码如下:phpinterface UserInterface{/定义User的接口function getname();}interface TeacherInterface{/teacher相关接口function getLengthOfService();}class User implements UserInterface {/实现UserInterface接口private$name="tom;public function getName(){return$this->name;}}class Teacher implements TeacherInterface {/实现TeacherInterface接口private$lengthOfService=5;工龄public function getLengthOfService(){return$this->lengthOfService;}}继承自User类,同时实现了TeacherInterface接口.class GraduateStudent extends User implements TeacherInterface {private$teacher;public function_construct(){this->teacher=new Teacher();}public function getLengthOfService(){return$this->teacher->getLengthOfService();}}class Act{注意这里的类型提示改成了接口类型public static function getUserName(UserInterface$_user){echo"Name is".$_user->getName().";}这里的类型提示改成了TeacherInterface类型.public static function getLengthOfService(TeacherInterface$_teacher){echo"Age is".$_teacher->getLengthOfService().";}}graduateStudent=new GraduateStudent();Act:getUserName($graduateStudent);Act:getLengthOfService($graduateStudent);结果正如我们所要的,实现了有多重身份的一个对象.示例运行结果如下:Name is tomAge is 54、接口类和抽象类的区别抽象类:1.类中至少有一个抽象方法2.前面加abstract接口:1.成员属性为常量const2.前面不用加abstract3.类中全部为抽象方法,接口抽象方法为public5、接口类和抽象类 共同点:1.本身不能被实例化,必须继承或者引用2.继承和引用后,抽象方法必须重载才能实例化关键字 interface.引用关键字 implements内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • php abstract与interface之间的区别
  • 领悟php接口中interface存在的意义
  • php中关键字interface和implements详解
  • php spl标准库之接口(interface)详解
  • php接口类(interface)的定义、特点和应用示例
  • 总结对比php中的多种序列化
  • fckeditor的安装(php)
  • php实现过滤ubb代码的类
  • php处理postfix邮件内容的方法
  • 用php实现递归循环每一个目录
  • php 中英文语言转换类代码
  • php函数超时处理方法
  • php 获取文件后缀名,并判断是否合法的函数
  • javascript+php实现根据用户时区显示当地时间的方法
  • php4和php5性能测试和对比 测试代码与环境
  • 怎么在PHP中定义和使用接口interface
  • interface一般用什么用途,怎么用? - PHP进阶讨论
  • php中abstract与interface区别?
  • php interface和api的区别?
  • php interface 和抽象的区别
  • php interface类库怎么使用
  • PHP 中为什么没有类似 Java 的 interface 接口
  • PHP5中interface 和 abstract class 的区别
  • $bakeback = A('Interface://ProxyCost');这句php是什么意思啊
  • PHP5中interface 和 abstract class 的区别
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程php abstract与interface之间的区别领悟php接口中interface存在的意义php中关键字interface和implements详解php spl标准库之接口(interface)详解php接口类(interface)的定义、特点和应用示例总结对比php中的多种序列化fckeditor的安装(php)php实现过滤ubb代码的类php处理postfix邮件内容的方法用php实现递归循环每一个目录php 中英文语言转换类代码php函数超时处理方法php 获取文件后缀名,并判断是否合法的函数javascript+php实现根据用户时区显示当地时间的方法php4和php5性能测试和对比 测试代码与环境php中json_decode()和json_encodphp 数组和字符串互相转换实现方php中使用curl实现get和post请求php中iconv函数使用方法php日期转时间戳,指定日期转换成php 页面跳转到另一个页面的多种php中文处理 中文字符串截取(mb_php下intval()和(int)转换使用与利用phpexcel实现excel数据的导入phpmyadmin 配置文件详解(配置)php获取msn好友列表类的实现代码php 程序员的调试技术小结swoole实现异步投递task任务案例详解php中ltrim()函数的用法与实例讲解php-fpm 设置多pool及配置文件重写操作示joomla内置的表单验证功能使用方法修改php的memory_limit限制的方法分享php mssql 分页sql语句优化 持续影响php学习记录之面向对象(object-orientedphp实现简单汉字验证码
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved