1

我知道还有其他方法可以存档,但问题是......这是关于以下内容的缺点

MyGlobalConfig.php

<?php

namespace Acme\DemoBundle;

class MyGlobalConfig
{
    public static $uploadsDir;
}

应用内核.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 回答