详解PHP的抽象类和抽象方法以及接口总结


Posted in PHP onMarch 15, 2019

PHP中的抽象类和抽象方法自己用的不多,但是经常会在项目中看到别人使用,同样,今天在看别人的代码的时候,发现使用了抽象类,就总结下:

  1. 抽象类:

1、如果一个类中有一个方法是抽象方法,则这个类就是抽象类;
2、抽象类必须加上abstract关键字修饰;

  1. 抽象方法:

定义:一个方法如果没有方法体,则这个方法就是抽象方法
1、一个方法没有方法体,直接用分号结束的方法;
2、如果是抽象方法,必须使用abstract抽象关键字形容

注意:1、只要有abstract修饰的类就是抽象类
     2、除了在抽象类中可以有抽象方法之外,和正常的类完全一样

 3、抽象类不能实例化对象

 4、如果有抽象类,就必须有这个类的子类,并且在子类中写方法覆盖抽象类中的抽象方法(加上方法体)

 5、子类必须全部重写父类中的抽象方法,这个子类才能被实例化,如果只是实现部分,那么这个子类还是抽象类

抽象类的作用:就是严格要求子类的结构,所以抽象类其实就是一个规范。

抽象方法的作用:就是规定子类必须有这个方法,且将功能交给子类来处理,只写出来方法的结构,而没有实现(无方法体),具体的功能实现交给具体的子类根据自己的需求实现

 

/**
* 抽象类
*
*/
abstract class Person
{
 public $name;
 public $age;

 //抽象方法
 abstract function say();

 abstract function eat();

 function run()
 {
 echo "hello world";
 }

 function sleep()
 {
 echo "test";
 }
}

 

/**
* 抽象类的子类
*
*/
class StudentCn extends Person
{
 function say()
 {
 echo "我说中文<br>";
 }

 function eat()
 {
 echo "我用筷子吃饭";
 }
}

接口:接口是一种特殊的抽象类

1、抽象类和接口都有抽象方法

2、抽象类和接口都不能实例化

3、抽象类和接口的使用意义(即作用)相同

比较:

a、接口中的方法,必须全部是抽象方法,所以接口中的抽象方法不需要使用abstract关键字,直接用分号结束即可
b、接口中的成员属性,必须是常量(不能有变量)
c、所有的方法必须全部是public
d、声明接口不适用class,而是使用interface

Tips:

1、可以使用extends让一个接口继承另一个接口,即常用的继承(扩展新抽象方法),无覆盖的关系
2、可以使用一个类来实现接口中全部方法,也可以使用一个抽象类,来实现接口中的部分方法
3、不要使用extends这个关键字,使用implements实现implements相当于extends
4、一个类可以在继承另一个类的同时,使用implements实现一个接口,也可以实现多个接口(一定要先继承,再实现接口)

/**
* 接口
*/
interface Demo
{
 const Name = "妹子";
 const Age = 10;

 function test();

 function test2();
}
echo Demo::Name;//访问常量

/**
* 接口继承接口,用于扩展接口
*/
interface Test extends Demo
{
 function test4();
}

/**
* 普通类
*/
class world
{
 function test5()
 {
 }
}


/**
* 继承+接口
*/
class Hello extends World implements Test
{

 function test()
 {
 }

 function test2()
 {
 }

 function test3()
 {
 }

 function test4()
 {
 }

 function test5()
 {
 }

}

以上所述是小编给大家介绍的PHP的抽象类和抽象方法以及接口总结详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP 和 XML: 使用expat函数(二)
Oct 09 PHP
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
php抓取https的内容的代码
Apr 06 PHP
php开发环境配置记录
Jan 14 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
PHP多进程通信-消息队列使用
Mar 08 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
PHP基于面向对象封装的分页类示例
Mar 15 #PHP
浅谈PHP无限极分类原理
Mar 14 #PHP
详解PHP队列的实现
Mar 14 #PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 #PHP
PHP的简单跳转提示的实现详解
Mar 14 #PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 #PHP
PHP模型Model类封装数据库操作示例
Mar 14 #PHP
You might like
单位速度在实战中的运用
2020/03/04 星际争霸
php实现文件下载实例分享
2014/06/02 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
javascript innerHTML使用分析
2010/12/03 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
2012/08/06 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
python使用递归的方式建立二叉树
2019/07/03 Python
Python实现word2Vec model过程解析
2019/12/16 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
吃空饷专项治理工作实施方案
2014/03/04 职场文书
yy生日主持词
2014/03/20 职场文书
新春寄语大全
2014/04/09 职场文书
保卫工作个人总结
2015/03/03 职场文书
奖金申请报告模板
2015/05/15 职场文书