Symfony:服务容器VS静态方法

时间:2017-04-01 01:49:42

标签: php symfony service static-methods

我们以此为例,我在Validator类中调用了validateDateTime方法。这个功能很简单,可以检查日期时间是否符合要求的格式。

namespace MyApp\Util;

use \DateTime;

class Validator {
    public static function validateDateTime($dateTime, $format = 'Y-m-d') {
        $d = DateTime::createFromFormat($format, $dateTime);
        return $d && $d->format($format) == $dateTime;
    } 
}

在我学习Symfony之前,如果必须在整个应用程序中共享该函数,我总是使用静态方法来简化函数的使用。

在我学习了Symfony之后,我知道Symfony有一个非常强大的功能,它是服务容器,可以同样方便地访问将在整个应用程序中使用的功能。

我的问题是:

  1. 使用静态方法与服务容器的优缺点
  2. 在Symfony最佳实践中,如果我想达到相同的目的(在整个应用程序中共享的功能),建议使用服务容器而不是静态方法。
  3. 在什么情况下,何时以及为什么,我们需要使用静态方法
  4. 非常感谢您的评论和意见。

1 个答案:

答案 0 :(得分:7)

如果您将来需要,请不要使用静态方法 - 您正在编写的功能的另一种实现方式。静态方法意味着“静态”,不得改变或扩展。

服务“IoC”容器用于通过解耦组件和反转它们之间的可靠性来使代码更易于更改或扩展,您可以添加新实现或更改现有实现,而无需对任何相关组件进行任何更改。