一文搞懂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 静态页面中显示动态内容
Aug 14 PHP
一个PHP缓存类代码(附详细说明)
Jun 09 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
PHP简单生成缩略图相册的方法
Jul 29 PHP
两种php实现图片上传的方法
Jan 22 PHP
php中preg_replace_callback函数简单用法示例
Jul 21 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
php防止表单重复提交实例讲解
Feb 11 PHP
PHP7新增函数
Mar 09 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&amp;&amp;mysql)六
2006/10/09 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
php实现倒计时效果
2015/12/19 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
php读取本地json文件的实例
2018/03/07 PHP
js TextArea的选中区域处理
2010/12/28 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
js实现表格字段排序
2014/02/19 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
使用Python来开发微信功能
2018/06/13 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
python如何更新包
2020/06/11 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
怎样声明一个匿名的内部类
2016/06/01 面试题
应届护士求职信范文
2014/01/26 职场文书
合作协议书怎么写
2014/04/18 职场文书
民政局个人整改措施
2014/09/24 职场文书
赢在中国观后感
2015/06/02 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript