我正在尝试创建一个更好的注册表类,因此我不必使用全局变量中的敏感信息来声明全局变量,如某些数据库连接。
这是我在一些教程中在网上找到的一个想法。我想问一下是否可以,或者我们可以通过其他方式改善它?
class registry {
private $register = array();
public function __set($index, $value) {
$this->register[$index] = $value;
}
public function __get($index) {
return $this->register[$index];
}
}
答案 0 :(得分:4)
Global variables are bad。如果您有独立变量,持有它们的对象,或者将它们存储在关联数组中,或者使用一个或多个Singleton对象来保存它们,则无关紧要。您的应用程序的所有部分都将依赖于这些魔术值,并且难以测试。
调用替代方法dependency injection允许您将这些配置值提供给实际需要它们的类,而不将它们置于全局状态。
依赖注入还有其他优点,例如依赖关系的解耦。换句话说,依赖于其他类的类不必自己创建依赖项,因此需要对它们进行硬连接,但框架可以为您注入它们(在对象中设置它们)。
有许多框架支持依赖注入,其中包括: