2017-04-01 89 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」容器用於通過解耦組件和反轉它們之間的可靠性來更容易地更改或擴展代碼,您可以添加新實現或更改現有組件,而無需對任何相關組件進行任何更改。