2017-04-01 85 views
2

我们以此为例,我有一个方法在Validator类中调用validateDateTime。此功能非常简单,可以检查日期时间是否为所需格式。Symfony:服务容器VS静态方法

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. 什么是使用静态方法VS服务容器的利弊
  2. 在Symfony的最佳实践,是建议在静态方法来使用服务容器,如果我想达到相同的目的(在整个应用程序中共享的功能)。
  3. 在什么情况下,什么时候,为什么,我们需要用静态方法

您的评论和意见都非常赞赏。

+1

FRom测试的观点静态方法很难模拟 – Matteo

回答

6

如果您可能需要-in-future-另一个您正在编写的功能的实现,请勿使用静态方法。静态方法的意思是“静态”,不要改变或扩展。

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