一文搞懂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 相关文章推荐
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
php自动加载的两种实现方法
Jun 21 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
注意!PHP 7中不要做的10件事
Sep 18 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 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面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
国际金融专业自荐信
2014/07/05 职场文书
师德师风的心得体会
2014/09/02 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
档案管理员岗位职责
2015/02/12 职场文书
电台广播稿范文
2015/08/19 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
Python anaconda安装库命令详解
2021/10/16 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
如何利用python实现Simhash算法
2022/06/28 Python