一文搞懂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面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
php表单请求获得数据求和示例
May 15 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
PHP实现文字写入图片功能
Feb 18 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 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/08/07 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
JS冒泡事件的快速解决方法
2013/12/16 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
BootStrap 动态表单效果
2017/06/02 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
javascript获取select值的方法完整实例
2019/06/20 Javascript
Python进程间通信之共享内存详解
2017/10/30 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
python获取Linux发行版名称
2019/08/30 Python
Python切图九宫格的实现方法
2019/10/10 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
小学数学教研活动总结
2014/07/01 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
世界红十字日活动总结
2015/02/10 职场文书
师德培训心得体会2016
2016/01/09 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
java调用Restful接口的三种方法
2021/08/23 Java/Android