详解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开发中的安全防范知识详解
Jun 06 PHP
深入PHP变量存储的详解
Jun 13 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
php数字运算验证码的实现代码
Jul 30 PHP
zend框架实现支持sql server的操作方法
Dec 08 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
Dec 23 PHP
详细解读php的命名空间(二)
Feb 21 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
Oct 15 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/04/28 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
php常用的工具开发整理
2019/09/26 PHP
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
python实现员工管理系统
2018/01/11 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
pymongo中group by的操作方法教程
2019/03/22 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
python中对_init_的理解及实例解析
2019/10/11 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
详解HTML5新增标签
2017/11/27 HTML / CSS
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
在C#中如何实现多态
2014/07/02 面试题
大学生个人求职信范文
2013/09/21 职场文书
快递员岗位职责
2014/09/12 职场文书
个人授权委托书
2014/09/15 职场文书
运动会加油稿50字
2015/07/21 职场文书
班主任工作总结范文
2015/08/13 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
Python基础之条件语句详解
2021/06/16 Python