Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 注册表模式与$GLOBALS_Php_Design Patterns - Fatal编程技术网

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'];