返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >告诉你如何破解PHP单继承魔咒
  • 410
分享到

告诉你如何破解PHP单继承魔咒

2024-04-02 19:04:59 410人浏览 泡泡鱼
摘要

目录前言Trait简介Trait作用单继承结构示例源码创建Trait调用方法的优先级:使用Trait引入位置编译问题总结前言 我们都知道PHP是单继承语言,但是有些时候我们两个在业务

前言

我们都知道PHP是单继承语言,但是有些时候我们两个在业务上毫不相干的两个类可能存在类似的行为,我们如何优雅的做到DRY(Don’t Repeat Yourself)呢?

答案就是引入Trait

Trait简介

Trait是php 5.4引入的新概念,看上去既像类又像接口。

其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中。

Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

Trait作用

  • 表明类可以做什么;
  • 提供模块化实现。

单继承结构

开篇我就提到了PHP是单继承语言,我们通常的习惯是:

  • 先编写一个通用的基类,实现基本的功能,进行通用逻辑的封装,然后扩展这个基类;

  • 然后再创建更具体的子类,直接从父类继承实现。

这叫方式就是单继承层次结构,很多编程语言都使用这个模式。

大多数时候这种典型的继承模型能够良好运作,但是如果想让两个无关的PHP类具有类似的行为,应该怎么做呢?

示例源码

我查询了Laravel的源码,以自带的LoginController为例,其中的登录认证就是通过Trait实现:

创建Trait

创建Trait很简单,跟创建类有点类似,只不过使用的关键字是trait而不是class,以上述的AuthenticatesUsers为例:

我们通过trait声明定义的是一个Trait,然后我们可以在这个Trait中像类一样定义要使用的属性和方法。

此外Trait支持嵌套和组合,即通过一个或多个Trait(多个用,分隔)组合成一个Trait,比如AuthenticatesUsers就是如此:

注意:Trait中还支持定义抽象方法和静态方法,其中抽象方法必须在使用它的类中实现。

调用方法的优先级:

调用类>Trait>父类(如果有的话),方法可以覆盖,但属性不行。

注意:如果Trait中定义了一个属性,如果调用类中也定义这个属性则会报错。

使用Trait

Trait的使用方法也很简单,上面的截图示例中已经显示的很清楚明了:使用use关键字。

引入位置

注意:命名空间和Trait使用的都是use关键字引入,不同之处在于导入位置,命名空间在类的定义体外导入,而Trait在类的定义体内导入

编译问题

如果Trait和引用Trait的类有相同的属性和方法,我们再外部调用时需要使用instansof关键字指明方法是类的还是Trait的。

因为PHP解释器在编译时会把Trait复制到类的定义体中,但是不会处理这个操作引入的不兼容问题,需要我们来解决兼容问题。

总结

到此这篇关于如何破解PHP单继承魔咒的文章就介绍到这了,更多相关破解PHP单继承内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 告诉你如何破解PHP单继承魔咒

本文链接: https://lsjlt.com/news/140429.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 告诉你如何破解PHP单继承魔咒
    目录前言Trait简介Trait作用单继承结构示例源码创建Trait调用方法的优先级:使用Trait引入位置编译问题总结前言 我们都知道PHP是单继承语言,但是有些时候我们两个在业务...
    99+
    2024-04-02
  • PHP中如何用Trait解决单继承问题
    这篇文章主要讲解了“PHP中如何用Trait解决单继承问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中如何用Trait解决单继承问题”吧!我们都知道PHP是单继承语言,但是有些时候...
    99+
    2023-06-29
  • 如何理解PHP类的继承
    如何理解PHP类的继承,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PHP类的继承在PHP语言的学习中是一个比较重要的知识点。那么我们该如何正确的学习PHP类的继承呢?在P...
    99+
    2023-06-17
  • 大神告诉你如何理解微服务框架
    因为Martin Fowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微服务架构,又要各想办法,具体问...
    99+
    2023-06-03
  • 你真的了解PHP函数吗?这份面试指南告诉你如何答题。
    PHP是一种流行的编程语言,它是许多网站和应用程序的基础。PHP函数是这种语言的核心组成部分,它们为开发人员提供了一种可重用的代码块,可以在应用程序中使用。在PHP面试中,函数是一个重要的话题,因此,如果您想要通过PHP面试,那么您需要了解...
    99+
    2023-08-28
    面试 自然语言处理 函数
  • CSS开发进阶之路:项目经验告诉你如何突破技术瓶颈
    CSS开发进阶之路:项目经验告诉你如何突破技术瓶颈在现如今的互联网时代,网页设计已经离不开CSS(Cascading Style Sheets)这一技术。CSS作为网页的样式布局语言,负责控制网页的外观和样式,是网页设计中的重要组成部分。然...
    99+
    2023-11-02
    项目经验 CSS进阶 技术瓶颈
  • Load 过慢?PHP 日志分析告诉你如何优化代码!
    PHP 是一种广泛使用的编程语言,尤其在 Web 开发领域中,PHP 的应用非常广泛。但是,随着应用规模的扩大,PHP 应用的性能问题也日渐突出。其中,应用的加载速度是影响用户体验的重要因素。如果你的应用加载速度过慢,那么你的用户很可能会...
    99+
    2023-08-10
    二维码 load 日志
  • 一文告诉你如何解决Tomcat乱码问题(很详细!)
    目录一、问题提出二、乱码原因三、彻底解决乱码问题补充:tomcat窗口中文乱码总结一、问题提出 相信很多初始Tomcat的小伙伴都会遇到下面的情况,启动Tomcat是一大堆看不懂的文...
    99+
    2024-04-02
  • Laravel中如何高效地使用对象?PHP学习笔记告诉你!
    Laravel是一个流行的PHP框架,它提供了许多强大的工具和功能来帮助开发人员构建高效的Web应用程序。其中一个最有用的功能是对象的使用。在本文中,我们将探讨如何在Laravel中高效地使用对象。 一、什么是对象? 在面向对象编程中,对象...
    99+
    2023-09-14
    学习笔记 对象 laravel
  • UNIX Shell 中的 PHP 开发,如何避免常见错误?这份学习笔记告诉你!
    在 UNIX Shell 中开发 PHP,是一种常见的方式。然而,这种方式也容易犯一些常见的错误。本篇文章将介绍如何避免这些错误,让你的开发更加高效。 确保 PHP 环境正确 在开始开发之前,要确保 PHP 环境正确。可以通过运行以下...
    99+
    2023-08-07
    学习笔记 unix shell
  • UNIX Shell 有什么优点?PHP 学习笔记告诉你如何利用 Shell 提高编程效率!
    UNIX Shell 是一个非常强大的工具,可以帮助程序员轻松完成各种任务,包括文件操作、系统管理、数据处理等等。在本篇文章中,我们将介绍 UNIX Shell 的优点,并讲解如何在 PHP 编程中利用 Shell 提高效率。 一、UNI...
    99+
    2023-08-07
    学习笔记 unix shell
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作