一文搞懂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生成静态页面详解
Nov 19 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
php echo()和print()、require()和include()函数区别说明
Mar 27 PHP
php适配器模式介绍
Aug 14 PHP
PHP错误和异长常处理总结
Mar 06 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
php实现encode64编码类实例
Mar 24 PHP
PHP实现页面静态化的超简单方法
Sep 06 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
laravel自定义分页效果
Jul 23 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
Feb 28 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
使用PHP实现蜘蛛访问日志统计
2013/07/05 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
PHP7新增函数
2021/03/09 PHP
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
2020/01/21 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
python判断字符串是否包含子字符串的方法
2015/03/24 Python
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
旷课检讨书2000字
2014/01/14 职场文书
新三好学生主要事迹
2014/01/23 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
宣传口号大全
2014/06/16 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
学校标语口号大全
2015/12/26 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
15个值得收藏的JavaScript函数
2021/09/15 Javascript