1

これをアーカイブする他の方法があることは知っていますが、問題は...次のようなものの短所です:

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);
    }

記事.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 に答える 1

4
  1. 使用しているクラスをテストするには、値を含む MyGlobalConfig を提供する必要があるため、テストできないコードですが、すぐに、ClassA が ClassB とは異なる構成値を受け取った場合に非常に役立つことに気付くので、作業の作成を開始します。それらのための周り。または、classA はグローバル状態をテスト値で汚染しますが、ClassB は元の値を必要とします。などなど、ぐるぐる走り回っています。

  2. 再利用できないコード。すべての構成コンシューマーは、おそらくモノリシックな同じクラスに依存しています。モノリシック クラスを使用せずに構成コンシューマを取り出すことはできません。

  3. つまり、トレースなしでどこからでも変更できるため、まったく予測不可能で脆弱です。

  4. 読みにくいコード

おそらくいくつかを忘れてしまいました...基本的には変装したグローバル変数です。不変であるため、グローバルスコープでは定数のみが問題ありませんが、それでも、多くの開発者は、使用すべきではないものにあまりにも多くの定数を使用しています。

于 2013-03-14T11:08:14.290 に答える