Php 注册表模式与$GLOBALS
我正试图找到一个为我的框架存储公共共享对象的好方法。以前,我使用Php 注册表模式与$GLOBALS,php,design-patterns,Php,Design Patterns,我正试图找到一个为我的框架存储公共共享对象的好方法。以前,我使用$GLOBALS访问这些共享对象。然而,我发现互联网上有很多文章说使用$GLOBALS是一种不好的做法,并建议使用注册表模式 然而,我很难理解注册表模式是如何比$GLOBALS更好的解决方案。例如: <?php $config = new Config(); $config->autoAppPath(__DIR__); $config->option = ... // some value;
$GLOBALS
访问这些共享对象。然而,我发现互联网上有很多文章说使用$GLOBALS
是一种不好的做法,并建议使用注册表模式
然而,我很难理解注册表模式是如何比$GLOBALS
更好的解决方案。例如:
<?php
$config = new Config();
$config->autoAppPath(__DIR__);
$config->option = ... // some value;
$config->option2 = ... // some value;
$db = new Database();
Registry::set('config', $config);
Registry::set('db', $db);
?>
我不确定注册中心打算在这里解决什么问题,它看起来像是一个美化了的全球组织
您应该研究的是依赖注入。您的代码不会带来立竿见影的好处,但当您想测试代码时,它确实会让您受益匪浅。如果您使用的是globals,您就不能对代码进行单元测试,因为您不能模仿任何东西。可能重复@TimCooper,在我提出这个问题之前,我已经阅读了这个问题。我认为这是不同的,因为我们谈论的是“注册表模式”是好是坏。这个问题是什么使得“注册表模式”比$GLOBALS更好。我自己也不确定。我只是想也许使用它有一些隐藏的价值。如果在(1小时)内没有进一步的答案,我会将此标记为答案。谢谢。这个注册表类也很容易被模仿。
Registry::get('config');
$GLOBALS['config'];