Traits是PHP5.4最大的新增功能之一.我了解特征背后的语法,理解特征背后的思想,比如水平代码对日志(log)、安全性、缓存等常见内容的重用.

然而,我仍然不知道我将如何在我的项目中利用特性.

有没有已经使用traits的开源项目?有关于如何使用traits构建架构的好文章/阅读material 吗?

推荐答案

我个人的观点是,在编写干净的代码时,实际上很少有人应用特性.

与其使用traits将代码破解到类中,不如通过构造函数或setter传入依赖项:

class ClassName {
    protected $logger;

    public function __construct(LoggerInterface $logger) {
        $this->logger = $logger;
    }
    // or
    public function setLogger(LoggerInterface $logger) {
        $this->logger = $logger;
    }
}

我发现这比使用trait更好的主要原因是,通过消除与trait的硬耦合,代码更加灵活.例如,您现在可以简单地传递一个不同的记录器类.这使您的代码可重用且可测试.

Php相关问答推荐

在Laravel中输出SON时如何将透视表列移动到集合?

在ShipStation for WooCommerce中使用自定义订单项目元数据

Laravel集合块()方法

创建一个新的可变产品及其属性以用于WooCommerce中的变体

WooCommerce我的帐户:从帖子作者处获取自定义帖子类型帖子ID

在WooCommerce管理中 for each 运输方法设置添加自定义字段

只收取WooCommerce中最高的运费

如何在execute语句中使用存储过程参数?

Laravel服务Provider 没有向服务类注入价值

哪里的表现能更好?

使用DOMPDF获取PDF格式的本 map 像

在WooCommerce购物车页面应用优惠券不会';t刷新总计

如何在自定义邮箱内容中获取WooCommerce订单项目的详细信息?

打折时更改 Woocommerce 产品名称

启用 WooCommerce 我的帐户付款方式,允许客户添加付款方式

向元素添加类时添加循环错误

如何在 php 中获取正确的时间

如何在 Process facade 中转义特殊字符?

NetBeans 不显示中文内容

Docker: unixodbc.h 没有这样的文件或目录.已安装 unixodbc-dev 时出现pecl install sqlsrv错误