详解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递归返回值时出现的问题解决办法
Feb 19 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
提高PHP性能的编码技巧以及性能优化详细解析
Aug 24 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
php mb_substr()函数截取中文字符串应用示例
Jul 29 PHP
php中opendir函数用法实例
Nov 15 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 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
mysql 全文搜索 技巧
2007/04/27 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
javascript RadioButtonList获取选中值
2009/04/09 Javascript
JS 判断undefined的实现代码
2009/11/26 Javascript
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
KTV的创业计划书范文
2014/02/02 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript