详解php中的implements 使用


Posted in PHP onJune 13, 2017

php类中接口的应用关键字是interface、implements了,接口是一种成员属性全部为抽象或常量的特殊抽象类,implements主要是对类名,类所拥有的方法,以及所传参数起约束和规范做用,有点像 abstract 抽象类。

类中接口的应用

1.关键字:interface

2.关键字:implements

1.接口的介绍与创建

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

规则:

1.类中全部为抽象方法。

2.抽象方法钱不用加abstract。

3.接口抽象方法属性为public。

4.成员属性必须为常量。

格式代码如下:

interface demo { 
const NAME = "常量对象属性"; 
function myfun1(); //抽象方法
function myfun2(); //抽象方法,不用具体写入逻辑 
}

一,接口的定义和调用

<?php
interface Cinema
{
  const film = '加勒比海盗';
  public function show();
}
class Order implements Cinema
{
  public function show()
  {
    echo "影院 接口开放了<br>";
  }
}
$face = new Order();
echo $face->show();    
echo Cinema::film;

说明:上面的例子要注意一点,接口的方法名是show,继承接口的类中必须有show这个方法,不然就会报错。也就是说接口的方法是假的,真正起作用的是在继承的类中的方法,这里接口和php的抽象类是不是有点像了?

二,对参数约束比较严

<?php
interface Cinema
{
  public function show(Order $show,$num);
}
// 显示正常
class Order implements Cinema
{
  public $number='0011排';
  public function show(Order $show,$num)
  {
    echo $show->number.$num;
  }
}
$face= new Order();
$face->show(new Order,$num='3人');//输出 0011排3人

说明:上面的这个例子继承接口类中,调用接口的方法时,所传参数要和接口中的参数名要一至。不然就会报错。

三,接口间的继承和调用接口传递参数

<?php
interface Cinema
{
  public function show();
}
interface Cinema1 extends Cinema
{
  public function show1(Order1 $object,$num);
}
class Order implements Cinema1
{
  public function show()
  {
    echo "准备就绪<br>";
  }
  public function show1(Order1 $object,$num)
  {
    //var_dump($object);
    echo $object->number."$num<br>";
  }
}
class Order1
{
  public $number="0012排";
  function fun(){
    echo ' =================';
  }
}
$show = new Order1;
$show->fun();     
$test = new Order();
$test->show();      
$test->show1($show,$num='6人');
// 输出 ===============准备就绪0012排6人

说明:上面的例子可以看到,接口Cinemal1继承了接口Cinemal,类Order继承了接口Cinemal1。不知道你发现没有,class类Order当中包括有二个方法,一个是show,一个show1,并且一个也不能少,如果少一个,报fatal错误。show1(Order1 $object,$num)中的Order1必须根继承类的名子要一样class Order1。如果不一样,也会报fatal错误。那如果一个接口被多个类继承,并且类名又不一样,怎么办呢?那就要用self了,下面会提到

 四,一个接口多个继承

<?php
interface demo {
  const NAME = "电影名称";
  function fun1();
  function fun2();
}
interface demo2 {
  function fun3();
  function fun4();
}
interface demo3 {
  const TEST = "这里是测试Test";
  function fun5();
}
class MyDemo implements demo, demo2 {
  function fun1() {
    echo "你好";
  }
  function fun2() {
    echo "----------";
  }
  function fun3() {
    echo "我也好<br />";
  }
  function fun4() {
    echo "大家都好<br />";
  }
}
class YourDemo extends MyDemo implements demo3 {
  function fun5() {
    echo "继承类后引用接口";
  }
}
$p = new YourDemo;
$p->fun1();
$p->fun2();
$p->fun3();
$p->fun4();
$p->fun5();

以上输出

你好----------我也好

大家都好

继承类后引用接口

上面的例子中我们可以看到接口都使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,再举个例子:

<?php
//定义接口
interface User{
  function getDiscount();
  function getUserType();
}

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

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

最后总结下:

抽象类和接口的区别

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

1.一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。

2.如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。

3.抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。

以上所述是小编给大家介绍的php中的implements 使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php addslashes和mysql_real_escape_string
Jan 24 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
for循环连续求和、九九乘法表代码
Feb 20 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
Jul 15 PHP
PHP return语句的另一个作用
Jul 30 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
PHP类型约束用法示例
Sep 28 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
May 29 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
PHP 实现重载
Mar 09 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 #PHP
php 中的closure用法详解
Jun 12 #PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 #PHP
PHP正则删除HTML代码中宽高样式的方法
Jun 12 #PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 #PHP
用php+ajax新建流程(请假、进货、出货等)
Jun 11 #PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 #PHP
You might like
PHP4和PHP5共存于一系统
2006/11/17 PHP
php之对抗Web扫描器的脚本技巧
2008/10/01 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
非常好的js代码
2006/06/27 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
JavaScript类库D
2010/10/24 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
Python requests接口测试实现代码
2020/09/08 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
python绘制高斯曲线
2021/02/19 Python
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
大学三年的自我评价
2013/12/25 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
校长师德表现自我评价
2015/03/04 职场文书
mysql知识点整理
2021/04/05 MySQL
带你了解Java中的ForkJoin
2022/04/28 Java/Android