1

注册表模式$_ENV有什么区别,特别是在 php 中使用?

它们中的哪一个提供更高的安全性和性能?

例如,为什么许多编码人员使用$config['deflang']和注册表模式而不仅仅是$_ENV['deflang']

提前致谢

4

4 回答 4

2

$_ENV有一个非常具体的目的——它是过程环境。你真的不应该把随机数据扔进去。如果你想这样做,至少使用一个全局(或者,更好的是,一个静态类成员)。

于 2012-05-01T20:08:54.297 回答
0

尝试这个:

class Registry {

    public static $instance;

    public function set($key, $val) {
        $this->_reg[$key] = $val;
    }
    public function get($key) {
        return $this->_reg[$key];
    }
    public static function Singleton() {
        $class = __CLASS__;
        if (!(self::$instance instanceof $class)) {
            try {
                if (!defined('REQUIRED')) {
                    throw new Registry_Exception('No direct access.');
                }
            } catch (Registry_Exception $e) {}
            self::$instance = new $class();
        }
        return self::$instance;
    }
    private function __construct() {}

}

$registry = new Registry();
$registry->set('setting', 'value');
于 2013-07-31T00:31:53.420 回答
0

这两件事完全不同。

  • $_ENV是一个包含所有环境变量的超全局数组。
  • $config是一些用户定义的变量,可以来自配置文件、数据库等。

一种常见的方法(尤其是在某些框架中)是有一个配置文件,其中包含一个具有多个配置的数组和一个环境变量(例如FRAMEWORKNAME_ENV),然后选择活动配置。

于 2012-05-01T20:11:11.390 回答
0

注册表模式允许您延迟加载资源。

$db = $_ENV['db_connection']; // The connection must be setup prior

对比

$db = $config->get('db_connection');
// An internal method can check for an existing connection 
// and set one up if needed
于 2012-05-01T20:12:19.450 回答