2013-03-14 55 views
1

我知道有其他的方法來歸檔此,但問題是...... 這是關於類似利弊:缺點PARAMS

MyGlobalConfig.php

<?php 

namespace Acme\DemoBundle; 

class MyGlobalConfig 
{ 
    public static $uploadsDir; 
} 

AppKernel.php

<?php 

use Symfony\Component\HttpKernel\Kernel; 
use Symfony\Component\Config\Loader\LoaderInterface; 
use Acme\DemoBundle\MyGlobalConfig; 

class AppKernel extends Kernel 
{ 
    public function __construct($environment, $debug) 
    { 

     MyGlobalConfig::$uploadsDir = __DIR__ .'/../uploads'; 

     parent::__construct($environment, $debug); 
    } 

Article.php

<?php 

namespace Acme\DemoBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Acme\DemoBundle\MyGlobalConfig; 

/** 
* @ORM\Entity 
*/ 
class Article 
{ 
    protected function getUploadsDir() 
    { 
     return MyGlobalConfig::$uploadsDir; 
    } 

回答

4
  1. 無法驗證代碼,因爲測試任何你需要爲他們提供與值MyGlobalConfig的使用類的,但很快你會發現,這將是非常如果ClassA收到與ClassB不同的配置值,那麼您可以開始爲這些配置值創建解決方法。或者classA用測試值污染全局狀態,而ClassB需要原始值。等你繼續在圈子裏跑來跑去。

  2. 不可重複使用的代碼,所有的配置消費者都依賴於相同的,可能是單一的類。你不能拿出一個配置消費者,而不是拿着它的單一類。

  3. 全局狀態,即可以從任何地方修改而無痕跡,因此完全不可預知和脆弱。

  4. 更難以識別碼

也許我忘了幾... 它基本上是變相的全局變量。 在全局範圍內只有常量是可以的,因爲它們是不可變的,但即便如此,許多開發人員對於他們不應該使用的東西使用太多的常量。

+0

對不起,等待,我希望更多的在此,謝謝! – coma 2013-05-10 09:08:10