PHP:何时使用Traits以及何时使用静态方法?

Kre*_*ieD 17 php methods static traits

我的PHP应用程序通常使用命名空间类.这些类中的方法定义为static.

现在PHP已经引入了Traits,我正试图解决何时使用它们的问题.我看到了一些使用traits的例子,但我认为这可以通过静态类方法轻松实现.

这里列出了一个使用记录器的相当全面的例子:PHP中的特征 - 任何现实世界的例子/最佳实践?

但是为什么要使用Trait,如果你也可以使用静态Logger :: log()?我现在唯一能想到的就是轻松访问$ this.我现在面临的另一个例子是用户存在的功能.特质吧,还是静态方法呢?

任何人都可以对此有所了解吗?

Kre*_*ieD 18

在阅读了关于这个问题的评论之后,我对答案的看法是这样的:

特征允许扩展类而不使其成为类层次结构的一部分.没有必要这样的东西class Book extends Loggable,因为Book本身不是Loggable,我们只想要Loggable功能.Loggable中的功能可以填充在特征中,因此可以使用Book中的Loggable方法,就像您从中扩展一样.

在类(或命名空间函数)中使用静态方法之上使用特征的优点是特征可以访问完整的类范围,也可以访问私有成员.

使用静态函数而不是traits的缺点是类之间的紧密耦合(依赖性),这会损害可重用性并且可能损害单元测试(例如,当使用模拟服务时).应该在运行时注入依赖项,这确实增加了实例化类/方法的工作量,但允许在整个应用程序上具有更好的灵活性.这对我来说是一个新的见解.