一文搞懂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截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
CodeIgniter php mvc框架 中国网站
May 26 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
PHP源代码数组统计count分析
Aug 02 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 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
Wordpress php 分页代码
2009/10/21 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
2017/08/02 PHP
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
Python中的推导式使用详解
2015/06/03 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
好的演讲稿开场白
2013/12/30 职场文书
10的分与合教学反思
2014/04/30 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
Golang中channel的原理解读(推荐)
2021/10/16 Golang
python实现局部图像放大
2021/11/17 Python
Python装饰器的练习题
2021/11/23 Python