一文搞懂PHP中的抽象类和接口


Posted in PHP onMay 25, 2022

一.抽象类

1.定义

用abstract 关键字来修饰一个类时,这个类就叫抽象类.

用abstract 关键字来修饰一个方法时,这个方法就是抽象方法.

2.应用场景

在实际开发中,我们可能有这样一种类,是其它类的父类,但是它本身并不需要实例化,主要用途是用于让子类来继承(规定子类),这样可以到达代码复用. 同时利于项目设计者来设计类。

3.入门代码

<?php
abstract  class  Man{

   public $name='父类的属性';

   abstract public function add();

}

class Boy extends Man{

    public function add(){
        echo "实现抽象类add方法";
        echo "<pre>";
    }
    public  function  GetName(){
          echo $this->name;
      }
}
$class=new Boy();
$class->add(); //实现抽象类add方法
$class->GetName(); //父类的属性

4.细节

  • 抽象类不能被实例化
  • 抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法
  • 一旦类包含了abstract方法,则这个类必须声明为abstract
  • 抽象方法不能有函数体
  • 如果一个类继承了某个抽象类,则它必须实现该抽象类的所有抽象方法.(除非它自己也声明为抽象类)

5. 代码分解

a.抽象类不能被实例化

一文搞懂PHP中的抽象类和接口

b.抽象类不一定要包含abstract方法。也就是说,抽象类可以没有abstract方法

一文搞懂PHP中的抽象类和接口

c.一旦类包含了abstract方法,则这个类必须声明为abstract

一文搞懂PHP中的抽象类和接口

d.抽象方法不能有函数体

一文搞懂PHP中的抽象类和接口

e.如果一个类继承了某个抽象类则它必须实现该抽象类的所有抽象方法.(除非它自己也声明为抽象类)

一文搞懂PHP中的抽象类和接口

二.接口

1.定义

接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。

拿接口来说。接口中定义的方法是聚合了需要实现接口类中必有(公共)的方法,所有实现接口的类有着耦合性,各自类实现接口中定义的方法互不打架。

2. 应用场景

说现在有一个项目经理,管理三个程序员,功能开发一个软件,为了控制和管理软件,项目经理可以定义一些接口,然后由程序员具体实现。

一文搞懂PHP中的抽象类和接口

当多个类 ,他们之间是平级的关系. 这些类都会去实现某个功能,只是实现的方式不一样.

一文搞懂PHP中的抽象类和接口

3.入门代码

<?php
interface a{
    public function  a();
}
interface b{
   public function  b();
}
//接口可以继承接口。类只能单一继承。
interface c extends a,b{
   public function  adc();
}
//c继承了 a和b。所以d要实现c所有的方法。
class  d implements  c{
   public function  a(){

   }
   public function  b(){

   }
   public function  adc(){
       
   }
}

4.注意细节

1.  不能去实例化一个接口

2.  接口中的所有方法,都不能有方法体

3.  一个类可以去实现多个接口

语法:

class 类名 implements 接口1,接口2{
  
}

4.  接口中可以有属性,但是必须是常量,并且是public

interface iUsb{
    const A=90;
  }
  iUsb::A; //调用

5.接口的方法是public 【默认就是public 】 ,不能是 protected 和private

三.类和接口之间关系

一文搞懂PHP中的抽象类和接口

继承和实现接口的比较:

可以认为 实现接口是对单一继承的补充.

可以在不破坏类层级关系的前提下,对某个类功能扩展.

到此这篇关于一文搞懂PHP中的抽象类和接口的文章就介绍到这了!


Tags in this post...

PHP 相关文章推荐
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
PHP插入排序实现代码
Apr 04 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 PHP
19个超实用的PHP代码片段
Mar 14 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
基于PHP实现通过照片获取ip地址
Apr 26 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
PHP检测一个数组有没有定义的方法步骤
Jul 20 PHP
用php实现分页效果的示例代码
Dec 10 PHP
PHP 时间处理类Carbon
May 20 #PHP
PHP RabbitMQ消息列队
May 11 #PHP
php解析非标准json、非规范json的方式实例
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
PHP正则表达式之RCEService回溯
微信小程序结合ThinkPHP5授权登陆后获取手机号
PHP遍历数组的6种方式总结
Nov 17 #PHP
You might like
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
python skimage 连通性区域检测方法
2018/06/21 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
python aiohttp的使用详解
2019/06/20 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
复古服装:RetroStage
2019/05/10 全球购物
初二生物教学反思
2014/02/03 职场文书
幼儿园新年寄语
2014/04/03 职场文书
大学迎新标语
2014/06/26 职场文书
演讲稿开场白台词
2014/08/25 职场文书
客户答谢会活动方案
2014/08/31 职场文书
2014年财务部工作总结
2014/11/11 职场文书
个人政治思想总结
2015/03/05 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL