详解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 相关文章推荐
探讨:web上存漏洞及原理分析、防范方法
Jun 29 PHP
PHP将session信息存储到数据库的类实例
Mar 04 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
php比较两个字符串长度的方法
Jul 13 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 PHP
Yii数据库缓存实例分析
Mar 29 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
PHP通过引用传递参数用法分析
Dec 01 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 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/05/21 PHP
深入php数据采集的详解
2013/06/02 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
php之可变变量的实例详解
2017/09/12 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
Python中enumerate函数代码解析
2017/10/31 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
python负载均衡的简单实现方法
2018/02/04 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python 字典套字典或列表的示例
2019/12/16 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
高中毕业生自我鉴定例文
2013/12/29 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
酒店节能降耗方案
2014/05/08 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书