使用注册表类代替全局变量.如何让它变得更好


Using Registry class instead of Global variables. How to make it better

我试图创建一个更好的注册表类,所以我不必像一些数据库连接一样声明全局变量,在全局变量中使用敏感信息。

这是我在网上的一些教程中找到的一个想法。我想问一下这样可以吗,还是我们可以用其他的方式做得更好?

class registry {
    private $register = array();
     public function __set($index, $value)  {
        $this->register[$index] = $value;
     }
     public function __get($index)  {
        return $this->register[$index];
     }
}

全局变量不好。如果你有独立变量,一个对象来保存它们,或者你把它们存储在一个关联数组中,或者你使用一个或多个单例对象来保存它们,这都无关紧要。应用程序的所有部分都依赖于这些魔法值,很难测试。

另一种方法叫做依赖注入,它允许你将这些配置值提供给真正需要它们的类,而不需要将它们置于全局状态。

依赖注入还有其他优点,比如依赖的解耦。换句话说,依赖于其他类的类不必自己创建依赖项,从而硬连接它们,但是框架可以为您注入它们(在对象中设置它们)。

有很多框架支持依赖注入,其中包括:

  • 交响曲
  • Yii
  • Zend