一文搞懂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 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
php中iconv函数使用方法
May 24 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
php遍历树的常用方法汇总
Jun 18 PHP
php实现转换ubb代码的方法
Jun 18 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
ThinkPHP5 的简单搭建和使用详解
Nov 15 PHP
php面向对象程序设计中self与static的区别分析
May 21 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 PHP
PHP实现发送微博消息功能完整示例
Dec 04 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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检查字符串中是否有外链的方法
2015/07/29 PHP
php验证码生成器
2017/05/24 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
利用python3随机生成中文字符的实现方法
2017/11/24 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
python日志模块logbook使用方法
2019/09/19 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
办公室文员工作自我评价
2013/12/01 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
管理专员自荐信
2014/01/26 职场文书
小学教师评语大全
2014/04/23 职场文书
英语导游词
2015/02/13 职场文书
2015年老干部工作总结
2015/04/23 职场文书