详解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学习笔记之二 php入门知识
Jan 12 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
PHP共享内存使用与信号控制实例分析
May 09 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
JavaScript中switch判断容易犯错的一个细节
2014/08/27 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
js模糊查询实例分享
2016/12/26 Javascript
js实现消息滚动效果
2017/01/18 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
Django 登陆验证码和中间件的实现
2018/08/17 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
python如何获取apk的packagename和activity
2020/01/10 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
优秀村官事迹材料
2014/01/10 职场文书
创业资金计划书
2014/02/06 职场文书
客户接待方案
2014/02/26 职场文书
爱护草坪标语
2014/06/24 职场文书
学校献爱心活动总结
2014/07/08 职场文书
红高粱观后感
2015/06/10 职场文书
消防宣传标语大全
2015/08/03 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
二年级作文之动物作文
2019/11/13 职场文书
室外天线与收音机天线杆接合方法
2022/04/05 无线电
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python