一文搞懂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 相关文章推荐
MYSQL环境变量设置方法
Jan 15 PHP
PHP 模拟登陆MSN并获得用户信息
May 16 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
PHP常用字符串函数用法实例总结
Jun 04 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
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
网页自动跳转代码收集
2009/09/27 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
Python实现多线程的两种方式分析
2018/08/29 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
Python计算信息熵实例
2020/06/18 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
应届专科生个人的自我评价
2014/01/05 职场文书
职工运动会邀请函
2014/02/02 职场文书
门面房租房协议书
2014/08/20 职场文书
优秀教研组申报材料
2014/12/26 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
花木兰观后感
2015/06/10 职场文书
React四级菜单的实现
2022/04/08 Javascript