一文搞懂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 相关文章推荐
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
PHP 表单提交给自己
Jul 24 PHP
使用php来实现网络服务
Sep 15 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
May 05 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
PHP简单遍历对象示例
Sep 28 PHP
PHP高并发和大流量解决方案整理
Dec 24 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中count获取多维数组长度的方法
2014/11/03 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
AngularJS中使用ngModal模态框实例
2017/05/27 Javascript
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
详解Vue底部导航栏组件
2019/05/02 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
Python编写一个优美的下载器
2018/04/15 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
对Python中plt的画图函数详解
2018/11/07 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
个人作风剖析材料
2014/02/02 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
2014年质量工作总结
2014/11/22 职场文书
PyQt5实现多张图片显示并滚动
2021/06/11 Python
A22国内电台短波广播频率表
2022/05/10 无线电
nginx七层负载均衡配置详解
2022/07/15 Servers