详解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数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
Oct 31 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
yii操作cookie实例简介
Jul 09 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 PHP
CI框架数据库查询缓存优化的方法
Nov 21 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
利用laravel+ajax实现文件上传功能方法示例
Aug 13 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 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安装为Apache DSO
2006/10/09 PHP
一个程序下载的管理程序(四)
2006/10/09 PHP
PHP4实际应用经验篇(5)
2006/10/09 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
浅析Python编写函数装饰器
2016/03/18 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python单链表简单实现代码
2016/04/27 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
vue常用指令代码实例总结
2020/03/16 Python
keras 权重保存和权重载入方式
2020/05/21 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
门球健将观后感
2015/06/16 职场文书