一文搞懂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制作静态网站的模板框架
Oct 09 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
PHP 文件系统详解
Sep 13 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 PHP
实例讲解php实现多线程
Jan 27 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
PHP重载基础知识回顾
Sep 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 htmlspecialchars加强版
2010/02/16 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
Python验证企业工商注册码
2015/10/25 Python
python编程线性回归代码示例
2017/12/07 Python
python opencv之SURF算法示例
2018/02/24 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
彪马法国官网:PUMA法国
2019/12/15 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
Python获取字典中某个key的value
2022/04/13 Python