注册表模式和$_ENV有什么区别,特别是在 php 中使用?
它们中的哪一个提供更高的安全性和性能?
例如,为什么许多编码人员使用$config['deflang']和注册表模式而不仅仅是$_ENV['deflang']
提前致谢
注册表模式和$_ENV有什么区别,特别是在 php 中使用?
它们中的哪一个提供更高的安全性和性能?
例如,为什么许多编码人员使用$config['deflang']和注册表模式而不仅仅是$_ENV['deflang']
提前致谢
$_ENV
有一个非常具体的目的——它是过程环境。你真的不应该把随机数据扔进去。如果你想这样做,至少使用一个全局(或者,更好的是,一个静态类成员)。
尝试这个:
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');
这两件事完全不同。
$_ENV
是一个包含所有环境变量的超全局数组。$config
是一些用户定义的变量,可以来自配置文件、数据库等。一种常见的方法(尤其是在某些框架中)是有一个配置文件,其中包含一个具有多个配置的数组和一个环境变量(例如FRAMEWORKNAME_ENV
),然后选择活动配置。
注册表模式允许您延迟加载资源。
$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