详解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技术构造远程服务(下)
Oct 09 PHP
第十四节--命名空间
Nov 16 PHP
mysql5写入和读出乱码解决
Nov 25 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
PHP封装的Twitter访问类实例
Jul 18 PHP
php中ob函数缓冲机制深入理解
Aug 03 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 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
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
thinkphp5框架API token身份验证功能示例
2019/05/21 PHP
JS array 数组详解
2009/03/22 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
js的对象与函数详解
2019/01/21 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python 域名分析工具实现代码
2009/07/15 Python
python二叉树的实现实例
2013/11/21 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
django框架如何集成celery进行开发
2017/05/24 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
青年志愿者事迹材料
2014/02/07 职场文书
2014年法务工作总结
2014/12/11 职场文书
毕业典礼致辞
2015/07/29 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
Ajax实现三级联动效果
2021/10/05 Javascript
VUE递归树形实现多级列表
2022/07/15 Vue.js