我遇到了一个注册表类,我想知道是否要打扰这个或者只是去常量,还是对网站范围的全局变量(例如数据库连接信息,网站URI等)有单独的用途?
这是我遇到的课程:
<?php
Class Registry {
private $vars = array();
public function __set($index, $value)
{
$this->vars[$index] = $value;
}
public function __get($index)
{
return $this->vars[$index];
}
}
?>
基本上只是一个具有神奇getter / setter数组的类。与使用常量相比,此代码有任何缺点吗?
答案 0 :(得分:1)
与一堆常量相比,配置类的最大优势是,如果你可以有多个配置(对于不同的环境),它们可以相互扩展,例如。
// define default Config and custom ones for specific environments
class BasicConfig {
function __construct() {
$this->db_driver = 'mysql';
// other params that are common to all configs
}
class TestConfig extends BasicConfig {
function __construct() {
parent::__construct();
$this->db_user = 'root';
$this->db_password = '';
// other params for test config
}
class ProductionConfig extends BasicConfig {
function __construct() {
parent::__construct();
$this->db_user = 'liveuser';
$this->db_password = 'secret';
// other params for production config
}
// change configuration depending on where we're running
if($_SERVER['SERVER_NAME'] == 'local')
$config = new TestConfig;
else
$config = new ProductionConfig;
// the main application doesn't care which config we're using
$application->init($config);
答案 1 :(得分:1)
虽然使用registry
时可能会有很小的开销,但我建议一个人使用它。
register_globals
将被关闭,但您无法控制。作为替代方案,您可以创建自己的注册表,以便通过定义自己的getter和setter来使其内容更明确。
答案 2 :(得分:0)
通过常数,我假设你的意思是命名变量。
无论如何,在您的示例中,类的优点是您现在拥有一个包含Object中所有变量的数组,您可以循环这些变量,并且可以存储可变数量的数据。
缺点是你现在有了一个Object,在查看时它不会告诉你存储的内容和它的作用。如果是一个名为“Registry”的类,这可能是合乎逻辑的,但是对于一个叫做“Car”的东西,它不是。
内存方面,最有效的方法可能取决于您如何使用该对象。