搜索热词

PHP 类是单继承,也就是不支持多继承,当一个类需要多个类的功能时,继承就无能为力了,为此 PHP 引入了类的接口技术。

如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是 public 权限的,那么这种特殊的抽象类就叫 接口 。

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

类中接口的应用

1.关键字:interface

2.关键字:implements

1.接口的介绍与创建

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

规则:

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

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

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

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

格式代码如下:

PHP;">

interface demo {

const NAME = "常量对象属性";

function fun1();

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

}

2.接口的应用与规范

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

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

PHP;">

class MyPc implements demo,demo2,demo3 {

...

}

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

PHP;">

abstract class MyPc implements demo,demo3 {

...

}

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

PHP;">

class MyPc extends Root implements demo,demo3 {

...

}

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

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

PHP;">

interface demo3 extends demo {

...

}

实例代码如下:

PHP;">

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 "++++++++++

";

}

function fun2() {

echo "----------

";

}

function fun3() {

echo "1111111111

";

}

function fun4() {

echo "2222222222

";

}

}

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;">

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也可以在继承一个类的时候同时实现多个接口:

PHP;">

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

{

......

}

抽象类和接口的区别

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

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

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

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

PHP;">

name;

}

}

class Teacher implements TeacherInterface{ //实现teacher接口

private $age=23;

public function getLengthofService(){

return $this->age;

}

}

$user=new User();

echo $user->getName().'

';//nostop

$teacher=new Teacher();

echo $teacher->getLengthofService().'

';//23

//继承类实现接口

class GraduResultudent extends User implements TeacherInterface{ //继承User类 实现接口

private $teacher;

public function __construct(){ //定义构造函数

$this->teacher=new Teacher(); //实例化Teacher对象

}

public function getLengthOfService(){ //实现TeacherInterface接口的方法

return $this->teacher->getLengthOfService();

}

}

class Result{

public static function getUserName(UserInterface $_user){ //注意:这里面的类型变成接口类型

echo "Name is ".$_user->getName().'

';

}

public static function getLengthOfService(TeacherInterface $_teacher){ //注意:这里面的类型变成接口类型

echo "age is ".$_teacher->getLengthOfService();

}

}

$object=new GraduResultudent();

Result::getUserName($object); //Name is nostop

Result::getLengthOfService($object); //age is 23

echo "

";

//接口实现用户的折扣

interface People{ //定义接口

function getUserType();

function getCount();

}

class VipUser implements People{ //实现接口

//用户折卡系数

private $discount=0.8;

function getUserType(){

return "VIP用户";

}

function getCount(){

return $this->discount;

}

}

$vip=new VipUser(); //实现化对象

echo $vip->getUserType().'商品价格:'.$vip->getCount()*100; //VIP用户商品价格:80

class Goods{

var $price=100;

var $member;

function run(People $member){ //注意:这里面的参数类型是接口类型

$this->member=$member;

$discount=$this->member->getCount();

$usertype=$this->member->getUserType();

echo $usertype."商品价格:".$this->price*$discount;

}

}

$display=new Goods();

$display->run(new VipUser);//VIP用户商品价格:80

?>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对编程之家的支持。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

php getcount_PHP中关键字interface和implements详解相关推荐

  1. java 静态 编译_Java中的动态和静态编译实例详解

    Java中的动态和静态编译实例详解 首先,我们来说说动态和静态编译的问题. Q: java和javascript有什么区别? 总结了一下:有以下几点吧: 1.首先从运行环境来说java代码是在JVM上 ...

  2. java中迭代器要导包吗_java 中迭代器的使用方法详解

    java 中迭代器的使用方法详解 前言: 迭代器模式将一个集合给封装起来,主要是为用户提供了一种遍历其内部元素的方式.迭代器模式有两个优点:①提供给用户一个遍历的方式,而没有暴露其内部实现细节:②把元 ...

  3. java asynchronize_Java 中synchronize函数的实例详解

    Java 中synchronize函数的实例详解 java中的一个类的成员函数若用synchronized来修饰,则对应同一个对象,多个线程像调用这个对象的这个同步函数时必须等到上一个线程调用完才能由 ...

  4. java8中的lambda表达式实用详解

    java8中的lambda表达式实用详解 1. lambda简介 ​ Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中 ...

  5. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  6. 创建emp表 oracle,Oracle中创建和管理表详解

    Oracle中创建和管理表详解 更新时间:2013年08月01日 15:44:16   作者: 以下是对Oracle中的创建和管理表进行了详细的分析介绍,需要的朋友可以过来参考下 SQL> /* ...

  7. mysql中find_in_set_mysql中find_in_set()函数的使用详解

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 . 现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那 ...

  8. c语言二级指针有什么作用,C语言中二级指针的实例详解

    C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...

  9. mysql映射mapper_Mybatis中Mapper映射文件使用详解

    紧接上文所述,在这篇文章中我将对Mapper映射文件进行详细的说明. Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看 ...

最新文章

  1. 矩形内接任意多边形抠图(可以羽化边缘)
  2. 【错误记录】Flutter 构建报错 ( Because xxx requires SDK version >=2.12.0-0 <3.0.0, versio | Dart SDK 版本低 )
  3. 吴恩达课程翻译_中文学习资源:斯坦福大学CS231n计算机视觉课程
  4. 浮动5-常用列表显示(案例)
  5. 用oracle怎么测试,oracle – 如何(单位)测试数据密集的PL / SQL应用程序
  6. sql server2016里面的json功能 - 转
  7. Mybatis源码阅读(一):Mybatis初始化1.1 解析properties、settings
  8. python语言-Python语言的一些基本常用语句
  9. SQL笔记三:MySQL常用函数
  10. HDU 5857 Median (推导)
  11. 分享5个爬虫专业博客网站
  12. 多商户商城系统功能拆解14讲-平台端会员等级
  13. 2006最优秀的20款防火墙推荐
  14. javascript 3d 逐侦产品展示
  15. 添加账号Linux命令,linux使用useradd命令添加用户
  16. Pytorch优化器Optimizer
  17. springboot毕设项目高校体育器材管理信息系统5us4g(java+VUE+Mybatis+Maven+Mysql)
  18. 外贸群发软件不好用,邮件群发很苦恼
  19. 2014去哪儿网几道题
  20. Perl特殊变量(flw等翻译)

热门文章

  1. linux c截断文件
  2. 蛋疼的中文编码及其计算机编码历史
  3. php常用代码(一)
  4. 条款9:避免隐藏标准形式的new
  5. [转]HDFS用户指南(中文版)
  6. 了解一下Elasticsearch的基本概念
  7. div中图片下方有边距
  8. SELECT TOP n 性能测试
  9. 手把手教你搭建springboot程序
  10. 适用于ELment-UI级联多选框,数据回填,根据子节点的值查找完整路径