PHP 中 Trait 和抽象类的区别

2024-03-17

我最近遇到Traits http://php.net/manual/en/language.oop5.traits.php在 PHP 中,我试图理解它们。在我的研究过程中,我偶然发现了这个 Stack Overflow 问题:特性与接口 https://stackoverflow.com/questions/9205083/traits-vs-interfaces。接受的答案提到以下内容:

接口定义了实现类必须的一组方法 实施。

当使用特征时,方法的实现也会随之而来——这在接口中不会发生。

到目前为止一切都很好,但这对我来说听起来就像接口和抽象类之间的区别。所以这给我提出了一个后续问题:

  • PHP 中的 Trait 和抽象类有什么区别?

我知道我只能从一个抽象类进行扩展,另一方面可以使用任意数量的特征。但这真的是唯一的区别吗?我仍然不完全理解特质及其用途。


Traits 允许您在类之间共享代码而不强迫您进入特定的类层次结构。假设您希望所有类都具有方便的实用方法foo($bar);如果没有特质,你有两种选择:

  • 在每个类中单独实现代码冗余
  • 从共同(抽象)祖先类继承

这两种解决方案都不理想,各有不同的权衡。代码冗余显然是不可取的,并且从共同祖先继承会使您的类层次结构设计不灵活。

Traits 通过让您实现来解决这个问题foo($bar)每个类都可以单独“导入”,同时仍然允许您根据业务逻辑需求而不是语言需求来设计类层次结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中 Trait 和抽象类的区别 的相关文章

  • 扭曲和响应类型以及特征对象?

    我有一个扭曲拒绝处理程序 我像这样使用它 recover handle rejection 它是这样声明的 pub async fn handle rejection err Rejection gt Result
  • AngularJS + Laravel 5 身份验证

    在使用 AngularJS 构建 SPA 时 我想在 AngularJS 网站中实现用户身份验证 但是 我不知道从哪里开始以及最佳实践是什么 基本上我有一个确定可以担任一个或多个角色 我寻找了一些例子 这样我就可以对如何正确处理这个问题有一
  • 将变量从 PHP 传递到 JavaScript 的有效方法[重复]

    这个问题在这里已经有答案了 有时我必须将一些变量从 PHP 传递到 JS 脚本 现在我是这样做的 var js variable 但这非常丑陋 我无法在 js 文件中隐藏我的 JS 脚本 因为它必须由 PHP 解析 处理这个问题的最佳解决方
  • 如何在codeigniter中引用数据库连接?

    如何在 CodeIgniter 数据库处理程序对象中手动调用 PHP 数据库函数 如何检索连接 dbc 或者调用类似的函数mysql real escape string dbc variable 您可以调用任何 mysql 本机函数并访问
  • php postgresql pdo 从标准输入复制

    COPY table name field1 field2 field3 FROM STDIN CSV 1 2 q w 3 4 a s 5 6 d 如何通过 PDO 执行此查询 Update 问题是 PDO 驱动程序将此查询作为语句执行 例
  • 从 PHP 执行 SQL Server 存储过程

    我尝试从 PHP 调用 SQL Server 存储过程 这是我的存储过程 CREATE procedure dbo tester id NVARCHAR MAX AS BEGIN DECLARE tab TABLE myxml XML IN
  • Magento 1.8 - 高级搜索不起作用

    我在最新版本的 magento 中发现了一个奇怪的错误 高级搜索工具无法正常工作 我做了什么 安装 magento 的新副本 在管理页面添加了一个名为 测试 1 的产品 重新索引全部 清除所有缓存 At the frontend page
  • PHP:__toString() 和 json_encode() 不能很好地协同工作

    我遇到了一个奇怪的问题 我不知道如何解决它 我有几个类 它们都是 JSON 对象的 PHP 实现 这是问题的说明 class A protected a public function construct this gt a array n
  • PDO 如何在执行 rollBack() 函数之前回滚查询?

    这是我的脚本 try dbh con gt beginTransaction stmt1 dbh conn gt prepare UPDATE activate account num SET num num 1 stmt1 gt exec
  • 在 WooCommerce 订单和电子邮件中添加并显示自定义购物车项目数据

    我有一个名为彩票的自定义 woocommerce 产品类型 我需要在其上添加一个自定义选择字段 因为它不是可变产品 所以我添加了一个 一切工作正常 我在购物车和结帐中也获得了价值 但我无法在管理订单或订单邮件 客户和管理员 中获得价值 这是
  • Laravel 5 Eloquent 关系:无法修改/覆盖关系表属性

    我正在使用 Laravel 5belongsToMany使用中间数据透视表定义相关表的方法 我的应用程序正在使用雄辩的模型Tour and 旅游类别 在游览模型中我有 namespace App use Illuminate Databas
  • 准备好的声明不返回任何内容

    我知道这个特定的查询是有效的 因为我用未经准备的过程方法测试了它 这里是 name introduction mysqli new mysqli localhost user pass db or die There was a probl
  • 通过日期选择器过滤查询后检索具有特定值的行数[重复]

    这个问题在这里已经有答案了 目前 我正在使用 CodeIgniter 来检索特定时间范围内的数据 所有这些条目都有一个状态 我想将具有相同状态的所有条目分组并将其显示在各自的标题中 目前 这是我的模型类 其中我有以下条目来返回特定日期范围内
  • 将 PHP 变量保存到文本文件

    我想知道如何将 PHP 变量保存到 txt 文件 然后 再次检索它们 Example 有一个输入框 提交后写的东西 输入框将被保存到文本文件中 稍后需要结果 作为变量带回 假设变量是 text I 需要将其保存到文本文件并能够将其检索回来
  • MPDF 未定义索引错误

    我正在使用 MPDF 库将 HTML 转换为 PDF 这是我的代码 HTML HTML CONTENT GOES HERE HTML STRING MPDF gt WriteHTML html Converting MPDF gt Outp
  • 使用 getJSON 未显示 JSON 数据

    document ready function getJSON news php parseInfo function parseInfo data alert data news undefined info html data news
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • Laravel 雄辩的 withCount() 应该比 with() 慢

    所以我问这个的原因是在我当前的应用程序中withCount 与仅通过以下方式获取关系的所有数据相比 响应时间几乎增加了三倍with 并只是从前端获取长度 javascript 我认为使用的要点withCount 是为了加快查询速度 但也许我
  • mysqli_connect(): (HY000/2002): 无法建立连接,因为目标机器主动拒绝

    我知道有很多这样的问题 但我没有找到任何解决方案 我尝试过的事情 检查防火墙 重新启动我的电脑和 Apache 服务器 重新启动MYSQL 检查了我的代码 尝试了我所知道的和在互联网上找到的一切 这是我的代码
  • /bootstrap/start.php 中的 Laravel 错误:\Illuminate\Foundation\Application 未找到

    因此 我在开发服务器上安装了 Laravel php5 5 3 标准安装 安装了 mcrypt 并收到以下错误消息 Fatal error Class Illuminate Foundation Application not found

随机推荐

  • 无法在 M1 Macbook 上启动 Cloud Run 容器

    我还没有在我的 M1 Macbook 上安装 Rosetta 安装了 Docker 和所有 deps 这甚至工作了几次 但不确定是什么突然导致了这个错误 Starting to run the app using configuration
  • 反应原生动画:滚动减慢时屏幕抖动

    我在用Animated View更改标题高度 它在 ios 中运行良好 但在 android 中 当我缓慢滚动时 整个视图都在晃动 1 首先我设置状态 this state scrollY new Animated Value 0 2 内部
  • 无需用户交互即可从服务器驱动 API 文档上传

    我正在 Django 中制作应用程序 该应用程序从表单上传文件并将其发送到谷歌驱动器 所以基本上我不知道需要用户的信息或让他们在谷歌上进行身份验证 从我们使用的快速入门指南authorize url to get code但我不需要oaut
  • 用 Java 洗牌

    我还有另一项练习要做 我确实需要帮助 我什至不知道我的 isFlush 方法是否有效 因为出于某种原因 我的套牌没有洗牌和发牌 我完全陷入困境 有人可以帮助我或指出我正确的方向或其他什么吗 这是练习 练习 12 5 本练习的目标是编写一个程
  • Express 中使用 cookie 会话保持登录选项

    我想要一个 保持登录状态 选项 例如 Gmail 提供的选项 这样 用户可以决定如果他们想在之前关闭浏览器会话后打开新的浏览器会话时保持会话打开 查看我看到的 github 问题cookie session 组件不提供更新的方法maxAge
  • 需要asp.net中的作业调度程序

    我们有一个网站 需要一个调度程序来在特定时间接收通知 电子邮件 例如 如果有人在下午 5 点设置提醒参加下午 4 45 的会议 则大约会在下午 4 45 收到电子邮件 由于此站点托管在共享服务器上 因此我们无法控制服务器来运行任何 SQL
  • 将 pdf 直接发送到打印机对话框的链接

    我尝试过以下2种方法 a class print a a Print file a 又一次尝试
  • Python 中的机械化 - 提交后重定向不起作用

    我刚刚开始在 Python 中使用 mechanize 但已经遇到了一些问题 我在 StackOverflow 和 Google 上查看过 我看到人们说文档很棒 并且应该很容易让它工作 但我想我不知道如何查找该文档 因为我所有的可以找到的代
  • [NSObject:任何对象]?' Xcode 6 beta 6 中没有名为“下标”的成员错误

    我使用下面的几行代码来获取键盘在屏幕上显示时的框架 我已经注册到UIKeyboardDidShowNotification通知 func keyboardWasShown notification NSNotification var in
  • 远程 RPC 客户端已解除关联。可能是由于容器超过阈值或网络问题。检查驱动程序日志中是否有 WARN 消息

    我正在开发 5 节点集群 每个节点 7 个核心 每个节点 25 GB 我当前的执行使用 1 2GB 输入数据 我能知道为什么会出现以下错误吗 我使用 pyspark 数据框 spark 1 6 2 Stage 9487 gt 198 2 2
  • 使用 BFS 进行加权图

    我正在修改单源最短路径算法 在视频中 老师提到BFS DFS不能直接用于查找最短路径 in a 加权图 我想每个人都知道这一点 并说自己找出原因 我想知道为什么它不能用于加权图的确切原因 解释 是由于边缘的重量还是其他原因造成的 有人可以解
  • 每个用户轨道的日期范围重叠

    如何使用下面的代码验证每个用户的日期 当我以其他用户身份登录时 我无法创建具有相同日期的预订 我有 user id 引用表 users 中的 id 我希望能够使 date start 和 date end 仅对用户唯一 并且仍然能够与不同的
  • 在 ARM 模板中引用 KeyVault 机密失败,并显示“模板中未定义资源”

    我正在尝试在 Azure Web 应用程序的 AppConfig 部分中创建 KeyVault 引用 KeyVault 引用引用了 KeyVault 中存在的机密 该密钥属于不同资源组 因此模板中不存在 根据文档 https learn m
  • 制作可前后移动的可定制 LCG

    我将如何让 LCG 伪随机数生成器的类型 在两个方向上移动 我知道前进是 a x c m但我怎样才能扭转它呢 我使用这个 所以我可以将种子存储在地图中玩家的位置 并能够通过在 LCG 中向后和向前传播 就像某种随机数线 来生成它周围的东西
  • 在 MVP 中,谁应该处理导航?

    我相信 Presenter 是负责处理 MVP 应用程序的导航方面的人 这是真的还是有例外 我认为视图是唯一负责屏幕导航的视图 Here https medium com nbarishok on navigation in android
  • 如何使用 Python 将 png 并排放置到 HTML 表格中

    我有一个 matplotlib 图转换为 png figure new savefig figure new png bbox inches tight pad inches 0 and a styler objectreport newt
  • 接受连续点的电子邮件的正则表达式

    这是我的正则表达式 a zA Z0 9 lt gt s lt gt s a zA Z0 9 0 9 1 3 0 9 1 3 0 9 1 3 0 9 1 3 a zA Z 0 9 a zA Z 2 例如 上述正则表达式接受电子邮件本地部分中的
  • 检查标志位java

    我的标志位有问题 我有一个int保存标志的变量 首先 我为该变量设置了一些标志 稍后我需要检查该变量中设置了多少个标志 但我不知道该怎么做 要检查是否设置了位值 int value VALUE TO CHECK OTHER VALUE TO
  • 检查 Java 字符串中的字母大小写(大写/小写)

    我遇到的问题是我无法让我的密码验证程序检查字符串以确保其中 1 个字符为大写字母 1 个字符为小写字母 它将检查整个字符串中的其中一个other 并根据正在检查的语句打印错误消息 我查看了这个网站和互联网来寻找答案 但找不到答案 这是家庭作
  • PHP 中 Trait 和抽象类的区别

    我最近遇到Traits http php net manual en language oop5 traits php在 PHP 中 我试图理解它们 在我的研究过程中 我偶然发现了这个 Stack Overflow 问题 特性与接口 htt