详解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 相关文章推荐
很实用的一个完整email发送程序
Oct 09 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
php中防止恶意刷新页面的代码小结
Oct 31 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
PHP中的替代语法介绍
Jan 09 PHP
php简单实现MVC
Feb 05 PHP
php实现两个数组相加的方法
Feb 17 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
thinkphp5修改view到根目录实例方法
Jul 02 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
php输出表格的实现代码(修正版)
2010/12/29 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
python交互式图形编程实例(三)
2017/11/17 Python
解决Python下imread,imwrite不支持中文的问题
2018/12/05 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
Python 变量的创建过程详解
2019/09/02 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
建筑设计学生的自我评价
2014/01/16 职场文书
四年级数学教学反思
2014/02/02 职场文书
教师竞聘演讲稿
2014/05/16 职场文书
会计电算化专业求职信
2014/06/10 职场文书
校园文化标语
2014/06/18 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
导游词之丽江普济寺
2019/10/22 职场文书