详解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修正代码
May 09 PHP
PHP的可变变量名的使用方法分享
Feb 05 PHP
simplehtmldom Doc api帮助文档
Mar 26 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
PHP经典实用正则表达式小结
May 04 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
php给数组赋值的实例方法
Sep 26 PHP
php7 新增功能实例总结
May 25 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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如何编写易读的代码
2007/07/10 PHP
YII中assets的使用示例
2014/07/31 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
JavaScript实现的XML与JSON互转功能详解
2017/02/16 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
详解原生JS回到顶部
2019/03/25 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
浅析matlab中imadjust函数
2020/02/27 Python
python打开音乐文件的实例方法
2020/07/21 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
优秀学生自我鉴定范例
2013/12/18 职场文书
cf收人广告词
2014/03/14 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
领导干部对照检查材料
2014/08/24 职场文书
欠款起诉书范文
2015/05/19 职场文书
导游词之西安骊山
2019/12/20 职场文书