特质不就是简单的组合吗?

2024-03-27

我正在阅读一篇有关 PHP 5.4.0 中的新功能的文章。 最值得期待的之一是Traits http://php.net/traits.

阅读这些内容Traits,看看它们的全部内容,对我来说它们只是编译器辅助的复制粘贴;一种语言提供了使用组合的方式,这与著名的策略模式中使用的非常相似,该策略模式利用了“优先组合而不是继承”的设计原则。

我的理解正确吗?

这些特性还可以提供哪些其他优势,使它们值得而不是仅仅使用组合设计原则?


不,特征不仅仅是组合,因为特征“粘贴”到类中的规则完全不同。

使用组合时,不会发生冲突或方法覆盖,因为组合元素是一个完全隔离的单元(某个其他类的实例),您可以通过消费实例中的公共 API 与其进行交互。此外,如果您需要提供来自使用实例的访问,则必须添加代理方法来委托给复合元素。

另一方面,特征成为它们所使用的实例的 API 的一部分。它们不是实例中的子系统。它们甚至不是实例,而只是可重用的样板代码。这提供的一个好处是满足具有特征的接口,正如我在PHP 的特征 – 有现实世界的例子/最佳实践吗? https://stackoverflow.com/questions/7892749/traits-in-php-any-real-world-examples-best-practices

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

特质不就是简单的组合吗? 的相关文章

  • 在 Typescript 中从基类创建子类的新实例[重复]

    这个问题在这里已经有答案了 我想创建新实例Child班级来自Base类方法 这有点复杂 但我会尽力解释 这是一个例子 class Base constructor clone Here i want to create new instan
  • 向 tk103 GPS 跟踪器发送命令

    我正在使用 php 开发实时 GPS 跟踪器 Web 应用程序 跟踪器参考号是tk103 我可以从跟踪器接收信息并将其存储到数据库中 设备的 GPRS 模式已启用 我的问题是 如何使用 php ini 将命令从服务器发送到设备 提前致谢 这
  • facebook og:image 不会从与 URL 相呼应的 php 文件中获取图像

    facebook OG 从回显 URL 获取图像 这可能吗 因为我包含了一个 php 文件 它将回显图像 URL 但是当我签入共享调试器时 内容为空 我的元标签 gt 和 php 文件
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • 是否需要使用fetch_object或fetch_array?

    我最近发现我可以打印数据库中的结果而不使用mysqli fetch object功能 例如 假设我们有一个简单的 sql select 语句 可以使用如下所示的语句来执行 conn mysqli connect localhost root
  • magento 删除管理菜单项

    在magento中 是否可以删除管理中的菜单项 我有一个新模块 并将评论和评级拉到一个新部分 我不反对将它们也留在目录部分 但如果可能 并且干净 我想将其从那里删除 将下一行添加到扩展 config xml 文件
  • PHP 中的循环数组

    我创建了一个由部分和问题组成的数组 如何循环浏览各个部分并显示每个部分的嵌套问题 这是我创建数组的方式 db db open query SELECT FROM assessment selections WHERE assessment
  • 禁用选择标签内的一个选项值在 IE6Ha 中不起作用[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个包含 4 个值 a b c d 的选择框 我只想禁用下拉列表中的 c 我使用了禁用属性 它在所有浏览器中都有效 但在 IE6
  • Laravel 5.4 密码重置

    我有一个 Laravel 5 4 应用程序 我的管理区域中有一个视图 允许我查看所有用户 我想创建一个功能 允许我单击后端的按钮 自动发送默认 Laravel 密码重置功能的过程 在我看来 我有以下几点 table class table
  • Javascript 闭包与 PHP 闭包,有什么区别?

    JS 中的闭包和 PHP 中的闭包有什么区别 它们的工作方式几乎相同吗 在 PHP 中编写闭包时有什么需要注意的注意事项吗 一个区别是两者如何处理存储执行匿名函数的上下文 JavaScript var a 1 var f function
  • 选择早于的时间戳

    我如何从数据库中选择超过 12 小时的项目 我使用时间戳列来存储时间 但我认为我不需要年 月 日 只需要小时 我有类似的东西 但它不起作用 没有错误 只是从表中返回所有数据 sql SELECT FROM Y WHERE X and tim
  • Mailgun 内联图像,它是如何工作的?

    我正在使用 mailgun 并希望将图像添加到我的时事通讯中 现在我这样做了 mg gt sendMessage domain array from gt email protected cdn cgi l email protection
  • 如何将从 MySQL 获取的数据以 JSON 形式返回到 php 文件中?

    我必须将从 MySQL 表中获取的数据作为 JSON 返回到 php 文件中 这是我连接到 mysql 并从中获取数据的代码 现在我怎么能将它作为 JSON 返回呢
  • 解析 PHP 多维数组

    这里 下面给出 是我正在做的一些非常简单的 php 解析多维数组的事情 我只是搜索 突出显示 键 然后将一些键值对存储在另一个数组中 有没有更好的方法来实现这一点 我的意思是关于性能 而不是有 n 个 foreach 循环来达到你想要的效果
  • 如果在 Woocommerce 中应用了任何优惠券代码,请删除一些支付网关

    我开始从事小型 Woocommerce 项目 我有 3 个支付网关进入这家商店 Paypal 信用卡和直接银行转账 我想要的是 如果使用优惠券代码 我想从可用的支付网关中禁用 或删除 Paypal 和信用卡 并仅保留 直接银行转账 作为可用
  • 需要初学者 PHP 帮助

    我学习 PHP 一段时间了 我想要一个澄清 我见过preg match使用不同的分隔符号调用函数 例如 preg match and preg match 今天我还看到了 正在使用 我的问题分为两部分 所有字符都可以使用什么 有一个标准吗
  • 将 foreach 与 SplFixedArray 结合使用

    看来我无法通过引用迭代 SplFixedArray 中的值 spl new SplFixedArray 10 foreach spl as value value string var dump spl Outputs Fatal erro
  • method_存在于父类php中

    我正在尝试使用 php 函数 method exists 但我需要检查该方法是否存在于对象的父类中 so class Parent public function myFunction class Child extends Parent
  • PHP 文件由浏览器下载,而不是由本地开发服务器(MAMP)处理

    一切都很顺利 直到我添加AddHandler application x httpd php5s php到本地服务器文档根目录中的 htaccess 文件 根据我正在使用的站点 我经常更改该文件 因为我访问时这样做了http 本地主机 88
  • 附加之前检查数据库中是否存在 ID

    我通过选择一个带有类别的数组json decode并将它们附加到文章中 public static function setArticleCategory Request request article Article where id r

随机推荐

  • 如何根据风格更改 Flutter 应用程序名称?

    我有 Flutter 应用程序的开发和生产风格 问题是开发和生产应用程序的标签和启动器是相同的 因此看不到差异 实际上不能同时在设备上安装两者 根据风格更改 Flutter 应用程序名称的简单方法是什么 我知道可以通过修改 AndroidM
  • 需要使用油脂猴脚本点击出价按钮

    我有点卡住了 我正在尝试创建一个油脂猴脚本 该脚本将自动单击拍卖网站上出现的弹出窗口 我有 Xpat 但我对 GM 的经验太丰富 无法让它发挥作用 这是我从 fire finder for firebug 获得的元素检查线
  • Sublime Text 中的边界敏感 Cmd+D

    我在 OSX 上使用 Sublime Text 3 Using cmd D I want to select the next instance of es but not if it s part of another word 鉴于此代
  • 如何从 Google App Engine for Java 调用 Google App 脚本

    我有一个谷歌应用程序脚本 我想从 Google App Engine for Java 调用它 有人可以指导如何调用这样的脚本吗 我试着用谷歌搜索这个 但只找到了很多关于如何进行相反操作的信息 请指教 6个月前我也有同样的问题 我可以使用脚
  • 缩短本地 jekyll 服务器的页面生成时间

    跑步时jekyll server 整个站点被重建 在足够大的站点上 这需要非常长的时间 即使与 auto标志 这应该会阻止整个站点重新生成 但完成时间相当长 对我来说 10 多秒 据报道对某些人来说需要几分钟 这在编辑和预览单个页面时很不方
  • NDK:libm 静态链接

    我在尝试使用最新的 android 9 x86 平台编译源代码时遇到问题 主要问题 为什么是静态库libm a和动态的libm so是不同的 问题是我尝试编译 path to android ndk r8 toolchains x86 4
  • 数据类型不一致:预期的 NUMBER 变为 BINARY

    我是 Hibernate 新手 我正在尝试对我创建的 Oracle 数据库进行 简单 用户插入 我使用 Netbeans Hibernate 向导创建了所有必需的文件 hibernate cfg xml hibernate reveng x
  • 如何在c#中向图标添加文本?

    我想在系统托盘中显示一个图标 ico 文件 并在运行时添加一些文本 有没有原生的 WPF 方法可以做到这一点 或 GDI 的片段也将不胜感激 谢谢 这是对我有用的代码 public static Icon GetIcon string te
  • 为什么使用 pandas apply 时会出现 KeyError?

    我正在参加 kaggle Outbrain 竞赛 我的代码中引用的所有数据集都可以在以下位置找到 https www kaggle com c outbrain click prediction data https www kaggle
  • 在C++中,向量函数push_back会增加空数组的大小吗?

    快问 假设我声明了一个大小为 20 的向量 然后我想使用 push back 添加一些整数 vector
  • 使用 RVM 安装 Ruby 2.0.0,配置错误

    我目前正在 Ruby 1 9 3p134 上运行 并尝试使用 RVM 安装 Ruby 2 0 0 但是我不断遇到以下错误 我在 OSX 10 7 5 上运行 运行 env LDFLAGS L opt sm pkg active lib 时出
  • 将整个 *ui 文件加载到另一个 *.ui 文件的框架/小部件中

    我正在为家庭项目开发一个小型用户界面 我使用 QT Designer 创建了一个 ui 文件 这是我的主窗口 带有一些导航按钮 标签等 现在 当我单击导航按钮时 我正在努力在主窗口的框架或小部件中加载另一个 ui 例如内容 我正在使用 py
  • jhipster细粒度授权,删除基于ROLE的授权

    我一直在寻找如何删除基于角色的授权并将其替换为细粒度授权 我所说的细粒是指 所有方法都有一个 PreAuthorize isAuthorize GETCLIENT 或直接 IsAuthorize GETCLIENT 如果用户在授权列表中有G
  • 删除孤立行的优雅方法?

    我有一个表 其中包含大量包含客户 ID 的历史记录条目 有一个单独的客户表 有时 某些客户条目会被删除 有没有一种简单的方法 无需循环遍历每个历史记录条目 即可删除历史表中客户 ID 不再存在的所有行 因为客户行已被删除 delete fr
  • 在 bevy-engine 中处理许多精灵的最快方法

    我正在使用 Rust 和 BevyEngine 构建元胞自动机可视化 游戏 目前 在初始化世界时 我为每个单元格生成一个精灵 在每次更新中 精灵的颜色都会根据它是活着还是死了而改变 for grid pos mut color mat in
  • Ember CLI 实时重新加载不工作

    我见过其他类似的问题here https stackoverflow com questions 25439380 live reload not working with ember cli and here https stackove
  • 加强托管线程和操作系统线程之间的关系(CUDA 用例)

    Problem 我正在尝试创建一个与 net 良好集成的 CUDA 应用程序 设计目标是拥有多个可以从托管代码调用的 CUDA 函数 数据还应该能够在函数调用之间保留在设备上 以便可以将其传递给多个 CUDA 函数 重要的是 每个单独的数据
  • 导入某种语言字母表中的所有字母

    是否可以将某种语言 土耳其语 波兰语 俄语等 的字母表中所有可能的字母 小写 大写等 导入为 python 列表 有特定的模块可以做到这一点吗 你的问题与一个更大的问题有关 某些语言的字母表如何存储在计算机中 它们如何表示 以及 最终 如何
  • 如何仅在服务器调用 PHP 脚本时运行它

    我有一个 PHP 脚本 只有在服务器本身调用它时才会运行 像这样 form submit 运行 AJAX 请求来 POST 表单数据 我不想开发一个哈希解码和编码系统来证明请求是否被允许 是否可以简单地检查 服务器是否运行脚本 或客户端是否
  • 特质不就是简单的组合吗?

    我正在阅读一篇有关 PHP 5 4 0 中的新功能的文章 最值得期待的之一是Traits http php net traits 阅读这些内容Traits 看看它们的全部内容 对我来说它们只是编译器辅助的复制粘贴 一种语言提供了使用组合的方