详解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 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
PHP配置文件中最常用四个ini函数
Mar 19 PHP
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
快速开发一个PHP扩展图文教程
Dec 12 PHP
php 随机生成10位字符代码
Mar 26 PHP
解析php中call_user_func_array的作用
Jun 07 PHP
取得单条网站评论以数组形式进行输出
Jul 28 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
php抽象类用法实例分析
Jul 07 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 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制作静态网站的模板框架(四)
2006/10/09 PHP
mysql5写入和读出乱码解决
2006/11/25 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
在django中使用自定义标签实现分页功能
2017/07/04 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
Python如何实现转换URL详解
2019/07/02 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
医院护士见习期自我鉴定
2014/04/10 职场文书
九一八事变演讲稿
2014/09/05 职场文书
夏洛特的网观后感
2015/06/15 职场文书
餐厅开业活动方案
2019/07/08 职场文书