浅谈php接口
来源:互联网 发布:mahout算法库 编辑:程序博客网 时间:2024/06/03 17:27
之前上学那会学习的专业是C#,工作中的php也在多个项目中,历练成长了不少,不过今天被一个问题问到,php接口,一直知道有这么一个东西存在,但是平时也没有怎么用到过接口,自己也查了下,先记录学习一下,以后有项目能用到那就在好不过
书面定义
接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式,就如面向对象程序设计提供的多重抽象化。接口可能也提供某种意义上的在讲不同语言的实体之间的翻译。人类与电脑等信息机器或人类与程序之间的接口称为用户界面。电脑等信息机器硬件组件间的接口叫硬件接口。电脑等信息机器软件组件间的接口叫软件接口。接口中定义的所有方法都必须是公有,这是接口的特性。使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
关于interface
interface是C# 中接口操作的关键字,功能是把所需成员组合起来,以封装一定功能的集合。它好比一个模板,在其中定义了对象必须实现的成员,通过类或结构来实现它。接口不能直接实例化,即ICount ic=new iCount()是错的。接口不能包含成员的任何代码,只定义成员本身。接口成员的具体代码由实现接口的类提供。接口使用interface关键字进行声明。
声明格式
[attributes] [modifiers] interface identifier [: base-list] {interface-body} {;}
使用说明
1、attributes(可选):附加的定义性信息。2、modifiers(可选): 允许使用的修饰符有 new 和四个访问修饰符。分别是:new、public、protected、internal、 private。在一个接口定义中同一修饰符不允许出现多次,new 修饰符只能出现在嵌套接口中,表示覆盖了继承而来的同名成员。The public, protected, internal, and private 修饰符定义了对接口的访问权限。3、指示器和事件。4、identifier:接口名称。5、base-list(可选):包含一个或多个显式基接口的列表,接口间由逗号分隔。6、interface-body:对接口成员的定义。7、接口可以是命名空间或类的成员,并且可以包含下列成员的签名: 方法、属性、索引器 。8、一个接口可从一个或多个基接口继承。接口这个概念在C#和Java中非常相似。接口的关键词是interface,一个接口可以扩展一个或者多个其他接口。按照惯例,接口的名字以大写字母"I"开头。
接口实现(implements)
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。【注意】 1、实现多个接口时,接口中的方法不能有重名。 2、接口也可以继承,通过使用 extends 操作符。 3、类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误。【常量】接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。
举个栗子
Example#1 接口示例
<?php// 声明一个'iTemplate'接口interface iTemplate{ public function setVariable($name, $var); public function getHtml($template);}// 实现接口// 下面的写法是正确的class Template implements iTemplate{ private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) { foreach($this->vars as $name => $value) { $template = str_replace('{' . $name . '}', $value, $template); } return $template; }}// 下面的写法是错误的,会报错,因为没有实现 getHtml():// Fatal error: Class BadTemplate contains 1 abstract methods// and must therefore be declared abstract (iTemplate::getHtml)class BadTemplate implements iTemplate{ private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; }}?>Example2 可扩充的接口
<?phpinterface a{ public function foo();}interface b extends a{ public function baz(Baz $baz);}// 正确写法class c implements b{ public function foo() { } public function baz(Baz $baz) { }}// 错误写法会导致一个致命错误class d implements b{ public function foo() { } public function baz(Foo $foo) { }}?>
Example3 继承多个接口
<?phpinterface a{ public function foo();}interface b{ public function bar();}interface c extends a, b{ public function baz();}class d implements c{ public function foo() { } public function bar() { } public function baz() { }}?>Example4 使用接口常量
<?phpinterface a{ const b = 'Interface constant';}// 输出接口常量echo a::b;// 错误写法,因为常量不能被覆盖。接口常量的概念和类常量是一样的。class b implements a{ const b = 'Class constant';}?>
案例
<?php/*** An example of duck typing in PHP*/interface CanFly { public function fly();}interface CanSwim { public function swim();}class Bird { public function info() { echo "I am a {$this->name}\n"; echo "I am an bird\n"; }}/*** some implementations of birds*/class Dove extends Bird implements CanFly { var $name = "Dove"; public function fly() { echo "I fly\n"; } }class Penguin extends Bird implements CanSwim { var $name = "Penguin"; public function swim() { echo "I swim\n"; } }class Duck extends Bird implements CanFly, CanSwim { var $name = "Duck"; public function fly() { echo "I fly\n"; } public function swim() { echo "I swim\n"; }}/*** a simple function to describe a bird*/function describe($bird) { if ($bird instanceof Bird) { $bird->info(); if ($bird instanceof CanFly) { $bird->fly(); } if ($bird instanceof CanSwim) { $bird->swim(); } } else { die("This is not a bird. I cannot describe it."); }}// describe these birds pleasedescribe(new Penguin);echo "---\n";describe(new Dove);echo "---\n";describe(new Duck);
1 0
- 浅谈php接口
- 浅谈接口
- 浅谈-----接口
- 浅谈接口
- 浅谈 接口
- 浅谈PHP调用接口实现天气查询功能
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈PHP与手机APP开发即API接口开发
- 浅谈在PHP中抽象类和接口的区别
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- union和union all之我见
- iOS扩展—Document Provider
- 在Django所有模板中使用session中的数据
- retrofit请求直接返回string
- android 画图之setXfermode 处理两图相交叉的情况
- 浅谈php接口
- Salesforce 发送公共信息
- <jsp:include>与<jsp:forward>
- Oracle入门之XP下常用默认配置(pagesize,linesize,editor等)
- Mac电脑上MAMP开发环境安装memcache
- 用pip 安装 python-consul
- 初识 Linux 文件权限--Linux基础教程
- tyvj2002 扑克牌
- 已封装了的OkHttpUtils