我知道还有其他方法可以存档,但问题是...... 哪些是类似的缺点:
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;
}
答案 0 :(得分:4)
不可测试的代码,因为要测试任何使用类需要为它们提供带有值的MyGlobalConfig,但很快您会注意到,如果ClassA收到的配置值不同于ClassB,那将非常有用,所以你开始为那些创造解决方案。或者classA用测试值污染全局状态,而ClassB需要原始值。等等。你继续在圈子里跑来跑去。
不可靠的代码,您的所有配置使用者都依赖于相同的,可能是单片的类。你不能拿出一个配置消费者而不用单片类。
全球状态,即可以从任何地方修改,因此完全无法预测和脆弱。
不太清晰的代码
可能我忘记了一些...... 它基本上是伪装的全球变种。 只有常量在全局范围内是可以的,因为它们是不可变的,但即便如此,许多开发人员也会使用太多的常量来处理他们不应该使用的东西。