详解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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
PHP之COOKIE支持详解
Sep 20 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
PHP实现统计所有字符在字符串中出现次数的方法
Oct 17 PHP
phpstorm 配置xdebug的示例代码
Mar 31 PHP
YII框架关联查询操作示例
Apr 29 PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 PHP
实例讲解PHP表单
Jun 10 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
php批量上传的实现代码
2013/06/09 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
javascript 回调函数详解
2014/11/11 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python中操作文件之write()方法的使用教程
2015/05/25 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
终端业务员岗位职责
2013/11/27 职场文书
英文简历中的自荐信范文
2013/12/14 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python
python调试工具Birdseye的使用教程
2021/05/25 Python
浅谈音视频 pts dts基本概念及理解
2022/08/05 数码科技