我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP中如何用Trait解决单继承问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP中如何用Trait解决单继承问题

这篇文章主要讲解了“PHP中如何用Trait解决单继承问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中如何用Trait解决单继承问题”吧!

PHP中如何用Trait解决单继承问题

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

答案就是引入Trait

Trait简介

Trait是PHP 5.4引入的新概念,看上去既像类又像接口。【推荐学习:《PHP视频教程》】

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

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

Trait作用

  • 表明类可以做什么;

  • 提供模块化实现。

单继承结构

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

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

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

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

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

示例源码

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

PHP中如何用Trait解决单继承问题

创建Trait

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

PHP中如何用Trait解决单继承问题

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

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

PHP中如何用Trait解决单继承问题

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

调用方法的优先级:

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

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

使用Trait

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

引入位置

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

PHP中如何用Trait解决单继承问题

编译问题

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

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

感谢各位的阅读,以上就是“PHP中如何用Trait解决单继承问题”的内容了,经过本文的学习后,相信大家对PHP中如何用Trait解决单继承问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP中如何用Trait解决单继承问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP中如何用Trait解决单继承问题

这篇文章主要讲解了“PHP中如何用Trait解决单继承问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中如何用Trait解决单继承问题”吧!我们都知道PHP是单继承语言,但是有些时候
2023-06-29

怎么解决PHP单继承问题

这篇文章给大家分享的是有关怎么解决PHP单继承问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Trait简介Trait是PHP 5.4引入的新概念,看上去既像类又像接口。其实都不是,Trait可以看做类的部分实
2023-06-29

如何解决VB.NET窗体继承问题

这篇文章主要介绍如何解决VB.NET窗体继承问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、创建一个基窗体Form1,在窗体中放入三个TextBox,为别为TextBox1 TextBox2 TextBox32
2023-06-17

C++中单继承与多继承如何使用

今天小编给大家分享一下C++中单继承与多继承如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言C++的继承机制相对其
2023-06-30

C++ 函数继承详解:如何避免“钻石继承”问题?

钻石继承问题:派生类同时从多个基类继承相同函数时出现的无法确定调用哪个函数版本的问题。解决方案:虚继承:创建基类的虚表指针,确保函数调用始终指向最具体的基类实现。实战案例:cylinder 类从 circle 和 rectangle 继承,
C++ 函数继承详解:如何避免“钻石继承”问题?
2024-05-02

Java 中怎么利用SynDemo对象解决继承问题

Java 中怎么利用SynDemo对象解决继承问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java SynDemo对象刚一出现的时候有很多程序员都很头痛,
2023-06-17

如何使用Golang继承方法解决问题和应用范例

Golang继承方法的优势和应用场景在Go语言中,虽然没有传统意义上的类的概念,但是通过结构体的嵌套和方法的继承,我们可以实现类似其他面向对象语言中的继承机制。本文将介绍Golang继承方法的优势和应用场景,并提供具体的代码示例。一、G
如何使用Golang继承方法解决问题和应用范例
2024-01-20

如何解析C++类继承关系问题

今天就跟大家聊聊有关如何解析C++类继承关系问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对***次接触到C++类继承的用户和学者来说,但是首先要对C++类继承的性质进行充分了解
2023-06-17

如何在Python中使用多继承解决复杂的代码重用问题

如何在Python中使用多继承解决复杂的代码重用问题引言:在编写复杂的代码时,代码重用性是一个非常重要的因素。Python中的多继承是一种强大的工具,它允许一个类从多个父类继承属性和方法。在本文中,我们将介绍如何在Python中使用多继承来
2023-10-22

C++中多重继承问题及解决方法概述

C++中多重继承问题及解决方法概述引言:在面向对象编程中,继承是一种重要的代码复用机制。C++支持多重继承,即一个子类可以同时从多个父类继承属性和方法。然而,多重继承也带来了一些问题,如命名冲突和二义性。本文将讨论多重继承问题,并介绍解决方
2023-10-22

C++中多重继承问题及解决方法的介绍

C++中多重继承问题及解决方法的介绍在C++中,多重继承是一种强大的特性,允许一个类从多个父类派生而来。然而,多重继承也带来了一些问题和挑战,其中最常见的问题是菱形继承问题(Diamond Inheritance Problem)。菱形继承
2023-10-22

PHP trait DTO:解决分布式系统中数据传输问题的解决方案

在当今的软件开发中,分布式系统已经成为一个不可忽视的趋势。由于分布式系统的特殊性,数据的传输变得尤为重要而又复杂。为了应对这个问题,PHP提供了trait DTO(Data Transfer Object)这个解决方案。DTO是一种设计模式
2023-10-21

CSS3如何为背景图设置遮罩并解决遮罩样式继承问题

这篇文章主要介绍了CSS3如何为背景图设置遮罩并解决遮罩样式继承问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。工作中很多时候需要对图片背景作处理,比如设置通透性,模糊处理
2023-06-08

sublime中php乱码问题如何解决

本文小编为大家详细介绍“sublime中php乱码问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“sublime中php乱码问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题描述在编辑 P
2023-07-05

php中如何解决Undefined index的问题

小编给大家分享一下php中如何解决Undefined index的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php提示Notice: Undefined index问题,Undefined index:是指你的代码
2023-06-15

如何解决php中use报错问题

这篇文章将为大家详细讲解有关如何解决php中use报错问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php use报错的解决办法:1、打开相应的代码文件;2、使用require引入文件;3、使用use
2023-06-22

php如何解决中文乱码问题

小编给大家分享一下php如何解决中文乱码问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php解决中文乱码的方法:1、在head标签里面加入UTF8编码;2、在
2023-06-07

PHP跨域问题如何解决

这篇文章主要讲解了“PHP跨域问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP跨域问题如何解决”吧!设置允许访问的域名:1、允许全部的域名访问header("Access-C
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录