一文搞懂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 相关文章推荐
xajax写的留言本
Nov 25 PHP
使用php测试硬盘写入速度示例
Jan 27 PHP
php curl 上传文件代码实例
Apr 27 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
记录一次排查PHP脚本执行卡住的问题
Dec 27 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
如何用PHP实现多线程编程
May 26 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权重计算方法代码分享
2014/01/09 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python找出9个连续的空闲端口
2016/02/01 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
365 Tickets英国:全球景点门票
2019/07/06 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
超市开业庆典策划方案
2014/05/14 职场文书
运动会加油稿100字
2014/09/19 职场文书
销售2014年度工作总结
2014/12/08 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
经销商会议开幕词
2016/03/04 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS