【发布时间】:2014-06-04 01:40:09
【问题描述】:
我的 PHP 应用程序通常使用类进行命名空间。这些类中的方法被定义为静态的。
既然 PHP 已经引入了 Traits,我正在努力思考何时使用它们。我看到了一些使用特征的示例,但我认为这可以通过静态类方法轻松实现。
这里列出了一个使用记录器的非常详尽的示例:Traits in PHP – any real world examples/best practices?
但是,如果您还可以使用静态 Logger::log(),为什么还要使用 Trait?我现在唯一能想到的就是轻松访问 $this。 我现在面临的另一个例子是用户存在的功能。 trait 呢,还是静态方法呢?
有人能解释一下吗?
【问题讨论】:
-
在代码库恕我直言,这两个都是废话。
-
@PeeHaa 请详细说明?
-
由于紧密耦合,两者都使您难以对代码进行单元测试。以及维护/调试它,因为某种神奇的“外部”代码被“导入”到类中。
-
特征主要用于减少代码重复。如果一堆类都具有相同的方法,但没有逻辑连接,因此将它们放在相同的层次结构中并继承该方法实际上是不可能的,那么您可以实现该方法一次并通过特征在所有这些类中使用它。 “特质与静态”是一个荒谬的问题,因为它不是一个非此即彼的事情。另见How Not To Kill Your Testability Using Statics
-
谢谢大家。我现在对此有了更好的感觉。 @deceze,那个链接很棒,谢谢,改变了我对编写静态函数的看法。