PHP面向对象开发之类中接口的应用(interface、implements)

类中接口的应用

1.关键字:interface
2.关键字:implements

1.接口的介绍与创建

接口:一种成员属性全部为抽象或常量的特殊抽象类。

规则:

1.类中全部为抽象方法。
2.抽象方法钱不用加abstract。
3.接口抽象方法属性为public。
4.成员属性必须为常量。

格式:

 代码如下 复制代码

interface demo {
const NAME = "常量对象属性";

function fun1();
function fun2(); //抽象方法。
}

2.接口的应用与规范

接口引用区别于类继承关键字 extends ,继承只能只是单一性,而接口可以使用关键字 implements 多个引用并用逗号分开

1.格式:普通类引用接口

class MyPc implements demo , demo2 , demo3 {
...
}

2.格式:抽象类应用接口例子

abstract class MyPc implements demo , demo2 , demo3 {
...
}

3.格式:继承父类引用接口并存

class MyPc extends Root implements demo , demo2 , demo3 {
...
}

先继承后接口,单继承多接口。

4.格式:接口与接口的继承

interface demo3 extends demo {
...
}

实例:

 代码如下 复制代码

<?php
interface demo {
 const NAME = "名称";
 function fun1();
 function fun2();
}

interface demo2 {
 function fun3();
 function fun4();
}

interface demo3 {
 const TEST = "Test";
 function fun5();
}

class MyPc implements demo, demo2 {
 function fun1() {
  echo "++++++++++<br />";
 }
 function fun2() {
  echo "----------<br />";
 }
 function fun3() {
  echo "1111111111<br />";
 }
 function fun4() {
  echo "2222222222<br />";
 }
}

class MyPs extends MyPc implements demo3 {
 function fun5() {
  echo "继承类后引用接口";
 }
}
$p = new MyPs;
$p->fun1();
$p->fun2();
$p->fun3();
$p->fun4();
$p->fun5();
?>

接口使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,且必须完全实现。

例子:

 代码如下 复制代码

<?php
//定义接口
interface User{
    function getDiscount();
    function getUserType();
}
//VIP用户 接口实现
class VipUser implements User{
    // VIP 用户折扣系数
    private $discount = 0.8;
    function getDiscount() {
        return $this->discount;
    }
    function getUserType() {
        return "VIP用户";
    }
}
class Goods{
    var $price = 100;
    var $vc;
    //定义 User 接口类型参数,这时并不知道是什么用户
    function run(User $vc){
        $this->vc = $vc;
        $discount = $this->vc->getDiscount();
 $usertype = $this->vc->getUserType();
        echo $usertype."商品价格:".$this->price*$discount;
    }
}

$display = new Goods();
$display ->run(new VipUser); //可以是更多其他用户类型
?>

运行该例子,输出:

VIP用户商品价格:80 元

该例子演示了一个 PHP 接口的简单应用。该例子中,User 接口实现用户的折扣,而在 VipUser 类里面实现了具体的折扣系数。最后商品类 Goods 根据 User 接口来实现不同的用户报价。

该例子仅限于演示 PHP 接口的用法,不涉及其科学与否。

实现多个接口

PHP也可以在继承一个类的时候同时实现多个接口:

class 子类 extends 父类 implemtns 接口1, 接口2, ...
{
    ......
}

抽象类和接口的区别

接口是特殊的抽象类,也可以看做是一个模型的规范。接口与抽象类大致区别如下:

1.一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。
2.如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。
3.抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。

时间: 2024-10-29 09:29:19

PHP面向对象开发之类中接口的应用(interface、implements)的相关文章

php学习笔记 面向对象中[接口]与[多态性]的应用_php基础

复制代码 代码如下: <?php /* 接口技术 * * 接口是一种特殊的抽象类,抽象类又是一种特殊的类 * * 接口和抽象类是一样的作用 * * 因为在PHP是单继承的,如果使用抽象类,子类实现抽象类就不能再去继承其他的类了 * * 如果既想实现一些规范,又想继承其他类.就要使用接口. * * 接口和抽象类的对比 * * 1.作用相同,都不能创建对象,都需要子类去实现 * * 2.接口的声明和抽象类不一样 * * 3.接口被实现方式不一样 * * 4.接口中的所有方法必须是抽象方法,只能声明抽

php 面向对象中接口 与多态性的用法

php教程 面向对象中接口 与多态性的用法 ,接口的方法名是show,继承接口的类中必须有show这个方法,要不然就会报错.也就是说接口的方法是假的,真正起作用的是在继承的类中的方法,就是因为这一点,所以我觉得,接口根php的抽象类有点像. <?php interface face1 {  const param = 'test';  public function show(); } class test implements face1 {  public function show()  

连载:面向对象葵花宝典:思想、技巧与实践(14) - 面向对象开发技术流程

抛开项目流程,让我们来谈谈"技术流程"吧!! 谈到流程,很多人立刻就会想到熟悉的瀑布模型.螺旋模型.迭代开发.敏捷.RUP等一堆软件工程相关的软件开发流程,但对于大部分人来说,这些流程仅仅是项目管理上的概念,只有项目经理开例会时那红红绿绿的甘特图.燃尽图.路径图等,或者只有评估工作量和是否要加班的时候,我们才会意识到这些流程的存在.   通俗的讲,项目管理上的流程主要是用于指导项目经理如何管理项目用的,但对于如何指导开发人员如何开发项目,并无多大用处.一个典型的情况就是刚毕业的大学生,

CodeIgniter开发实现支付宝接口调用的方法示例_php实例

本文实例讲述了CodeIgniter开发实现支付宝接口调用的方法.分享给大家供大家参考,具体如下: 准备: 1.alipay官方下载最新接口类库 2.解压后,将目录"\即时到账交易接口-create_direct_pay_by_user\demo\create_direct_pay_by_user-PHP-UTF-8\lib"复制到 application\third_party目录下,并改名lib为alipay 3.同样复制cacert.pem文件到"application

CodeIgniter开发实现支付宝接口调用的方法示例

本文实例讲述了CodeIgniter开发实现支付宝接口调用的方法.分享给大家供大家参考,具体如下: 准备: 1.alipay官方下载最新接口类库 2.解压后,将目录"\即时到账交易接口-create_direct_pay_by_user\demo\create_direct_pay_by_user-PHP-UTF-8\lib"复制到 application\third_party目录下,并改名lib为alipay 3.同样复制cacert.pem文件到"application

Office开发: 现实生活中的OBA解决方案模式

本文讨论: OBA 基础 OBA 模式 Microsoft Office 和 LOB 集成 OBA 模式 的实际应用程序 本文使用了以下技术: Visual Studio 2008 大型系统(如 SAP 和 PeopleSoft,以及其他综合业务线 (LOB) 系统)对于成功管理所有类型的业务数据和流程至关重要.然 而,并非组织中的每个人都可以访问这些系统,因此,其中的业务数据通常只提供给少数人.这经常导致 从系统外部抽取数据进行处理,从而造成业务数据源和使用这些数据的信息工作者之间脱节. Of

请求-采用 http post 方式 开发直充接口

问题描述 采用 http post 方式 开发直充接口 需求 腾讯公司在买家付款成功后发起直充请求,合作商返回直充状态. 1) 如果合作商创建订单失败,必须及时退款,返回退款中或者退款完成状态 2) 如果已经确认充值失败或充值成功,则返回对应值.否则可以返回充值中. 3) 充值中和退款中的订单需要后续通过"异步结果返回接口"将充值最终状态返回. 4) 如果直充请求没有任何返回,则会重复发送下单请求. 求大神代码

OpenGL ES 在 Android 开发库中 - 能不能再牛点儿

OpenGL ES 在 Android 开发库中 - 能不能再牛点儿 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Android 开发库中突然发现这些个东西,原来和原生的函数名一模一样,而且

Java面向对象高级--抽象类与接口的应用

1.为抽象类和接口实例化 抽象类和接口不能直接实例化,因为其内部包含了各个抽象方法,抽象方法本身都是未实现的方法,所以无法调用.通过对象多态性,子类发生了向上转型之后,所调用的全部方法都是被覆写过了的方法. 为抽象类实例化: abstract class A{ // 定义抽象类A public abstract void print() ; // 定义抽象方法print() }; class B extends A { // 定义子类,继承抽象类 public void print(){ //