详解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程序占用多少内存(memory_get_usage)
Sep 23 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
php输入流php://input使用浅析
Sep 02 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
PHP CURL使用详解
Mar 21 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
PHP程序守护进程化实现方法详解
Jul 16 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 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框架实现session跨域问题的解决方法
2014/07/01 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
Python中逗号的三种作用实例分析
2015/06/08 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
Python输出带颜色的字符串实例
2017/10/10 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
python 绘制场景热力图的示例
2020/09/23 Python
python源文件的字符编码知识点详解
2021/03/04 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
写给学生的新学期寄语
2014/01/18 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书