PHP与大多数面向对象编程语言一样,不支持多重继承。也就是说每个类只能继承一个父类。为了解决这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法。接口是一种特殊的抽象类,抽象类又是一种特殊的类,所以接口也是一种特殊的类,为 什么说接口是一种特殊的抽象类呢?如果一个抽象类里面的所有的方法都是抽象方法,那么我们就换一种声明方法使用“接口”;也就是说接口里面所有的方法必须 都是声明为抽象方法,另外接口里面不能声明变量(但可声明常量constant),而且接口里面所有的成员都是public权限的。所以子类在实现的时候 也一定要使用public权限实限。

声明一个类的时候我们使用的关键字是“class”,而接口一种特殊的类,使用的关键字是“interface”;

类的定义:  class 类名{ … } ,
接口的声明:interface 接口名{ …}

<?php
// 定义一个接口使用interface关键字,“One”为接口名称
interface One {// 定义一个常量const constant = 'constant value';// 定义了一个抽象方法”fun1”public function fun1();// 定义了抽象方法”fun2”public function fun2();
}
?>

上例中定义了一个接口“one”,里面声明了两个抽象方法“fun1”和”fun2”,因为接口里面所有的方法都是抽象方法,所以在声明抽象方法的时候就不用像抽象类那样使用“abstract”这个关键字了,默认的已经加上这个关键字,另外在接口里边的”public”这个访问权限也可以去掉,因 为默认就是public的,因为接口里所有成员都要是公有的,所在对于接口里面的成员我们就不能使用“private”的和“protected”的权限 了,都要用public或是默认的。另外在接口里面我们也声明了一个常量“constant“, 因为在接口里面不能用变量成员,所以我们要使用 const这个关键字声明。

因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象; 它也做为一种规范,所有抽象方法需要子类去实现。

我们可以使用”extends”关键字让一个接口去继承另一个接口:

<?php
// 使用”extends”继承另外一个接口
interface Two extends One {function fun3();function fun4();
}
?>

而我们定义一接口的子类去实现接口中全部抽象方法使用的关键字是“implements”,而不是我们前面所说的“extends”;

<?php
// 使用“implements”这个关键字去实现接口中的抽象方法 接口和类之间
class Three implements One {function fun1() {...}function fun2() {...}
}// 实现了全部方法,我们去可以使用子类去实例化对象了
$three = new Three();
?>

我们也可以使用抽象类,去实现接口中的部分抽象方法,但要想实例化对象,这个抽象类还要有子类把它所有的抽象方法都实现才行;

在前面我们说过,PHP是单继承的,一个类只能有一父类,但是一个类可以实现多个接口,就相当于一个类要遵守多个规范,就像我们不仅要遵守国家的法律,如果是在学校的话,还要遵守学校的校规一样;

<?php
// 使用implements实现多个接口
class Four implemtns 接口一, 接口二, ... {// 必须把所有接口中的方法都要实现才可以实例化对象。
}
?>

PHP中不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口, 一定要先继承类再去实现接口;

<?php
// 使用extends继承一个类,使用implements实现多个接口
class Four extends 类名一 implemtns 接口一, 接口二, ... {// 所有接口中的方法都要实现才可以实例化对象...
}
?>

【PHP面向对象(OOP)编程入门教程】20.PHP5接口技术(interface)相关推荐

  1. 【转载】PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持. 如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们 ...

  2. PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...

  3. 【PHP面向对象(OOP)编程入门教程】10.__set(),__get(),__isset(),__unset()四个方法的应用...

    一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数"__get()"和"__ ...

  4. php面向对象编程调用结果,【PHP面向对象(OOP)编程入门教程】18.__call()处理调用错误...

    在程序开发中,如果在使用对象调用对象内部方法时候,调用的这个方法不存在那么程序就会出错,然后程序退出不能继续执行.那么可不可以在程序调用对象内部 不存在的方法时,提示我们调用的方法及使用的参数不存在, ...

  5. 【PHP面向对象(OOP)编程入门教程】18.__call()处理调用错误

    在程序开发中,如果在使用对象调用对象内部方法时候,调用的这个方法不存在那么程序就会出错,然后程序退出不能继续执行.那么可不可以在程序调用对象内部 不存在的方法时,提示我们调用的方法及使用的参数不存在, ...

  6. PHP面向对象(OOP)编程完全教程:1.什么是面向对象?

    面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...

  7. php面向对象全攻略 (十四),php面向对象全攻略 (十四) php5接口技术

    20.PHP5接口技术 PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父 类.为了解决这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须 实现的一系 ...

  8. python编程入门-Python编程入门经典pdf(Python编程入门教程) 高清中文版

    Python编程入门经典pdf(Python编程入门教程)下载.Python编程入门经典pdf高清版帮助各位更好的进行Python编程的学习以及理解,最经典的课题,最深入的概念,让你在Python编程 ...

  9. TZC Python编程入门教程 ————题解

    本博客原文地址:Python编程入门教程(以在线评测平台为载体) - 暴力都不会的蒟蒻 - 博客园,原文体验更佳 如果你是一名浙江2020级及以后的高中生要学习Python,抑或是一位科学工作者要学习 ...

  10. python快速编程入门教程-终于懂得python快速编程入门教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

最新文章

  1. python 用递归求质数_编写一个递归函数,它接受和整数,如果它的所有数字都是质数,则返回“True”...
  2. ”A page can have only one server-side Form tag“错误
  3. php tp5 redis的使用(亲测)
  4. SpringMVC以及SSM整合
  5. 获取win7时区所有信息
  6. vue应用axios.get请求的代码格式(2种)- 代码篇
  7. 产品入门一——十分钟读懂产品经理
  8. centos 6.5 zabbix 离线安装历程
  9. 微信转发别人语音的方法
  10. 蓝桥杯和noip都考C语言么,为什么NOIP信息学奥赛C++普及组师资匮乏
  11. 知识图谱概念与知识图谱构建流程(KGC)总览
  12. xshell过期/安装教程
  13. python语法基础汇总
  14. 百度指数Cipher-text加密
  15. MIUI——添加学校邮箱到电子邮件解决方案
  16. 马云的创业故事及他人生中的摆渡人-微信的兴起和支付宝的至暗时刻(十)
  17. Spring Boot 3.0.0正式发布,Banner不再支持图片增强可观测性
  18. 5G NR 下行同步SSB(2)-- PSS和SSS的用途
  19. 支付宝2020年账单来了,看看自己花了多少钱?
  20. python while true循环卡住不动_python – While循环导致整个程序在Tkinter中崩溃

热门文章

  1. 网络数据传输过程分析
  2. ubuntu 19.04 + lenovo-xiaoxin-I2000 触摸板右键单击无法使用
  3. [BZOJ] 1639: [Usaco2007 Mar]Monthly Expense 月度开支
  4. Android的Service组件
  5. Jobdu 1005
  6. Ext中extend
  7. 网站运营模式之行业网站分析
  8. zeal刷新不出来_Zeal——好用的离线 API 文档大全!
  9. 普通用户从非80端口启动tomcat,通过端口转发监听80端口
  10. 【快学springboot】2.Restful简介,SpringBoot构建Restful接口