我有一个类负责处理所有配置 - 从文件中读取配置,并获取在index.php中设置的基本配置变量(+从那里设置它们)。
因此,我决定在这里使用多态 - 我创建了Config类abstract并使用FILE和VARIABLE类扩展它。
如果具有这两个职责的基类长度超过100行,这是一种良好的行为吗?
不要在这里贬低我 - 我只是不想在项目完成后发现它不是一个灵活的解决方案。
这是代码(虽然没有重构,测试和添加几个函数,但概念应该是明确的。)
class Config {
private $file;
public static $configs = array();
/**
* Initializes basic website configurations such as base URL, or the name
* of the index file.
*
* These values can be accessed through this class
*/
public static function init($configs = array())
{
foreach($configs as $key => $value)
{
self::$configs[$key] = $value;
}
}
/**
* Returns the configuration variable which is set in the index file
*
* @param string $attribute
* @return multitype:
*/
public function __get($attribute)
{
return ($this->configs[$attribute]) ? $this->configs[$attribute] : -1;
}
/**
* Setting path to the config file.
*
* @param string $module
*/
private function __construct($module)
{
// Path to the config file
$path = APATH . 'config' . DIRECTORY_SEPARATOR . $module . '.php';
// Set the config file to the attribute here
$this->file = include $path;
}
/**
* Return the object.
*
*/
public static function factory($module)
{
return new Config($module);
}
/**
* Loads configurations from the given file.
*
*/
public function load($property)
{
// Return requested value
return $array[$property];
}
}
答案 0 :(得分:1)
你所做的事情没有错误,但它让我想知道为什么你想这样做。
如果您尝试以特定方式强制执行配置变量的处理,那么可以在静态类中加载它们一次。如果你正在尝试抽象,那么它是100线还是1K或任何长的并不重要。
它确实让我想知道为什么你的配置变量分散在许多不同的文件中,这样就需要像这样封装加载过程。通常,配置信息在启动时加载一次并保留。如果在应用程序启动后的某个“路上”文件/类没有加载配置或只是忽略您的实现会发生什么?
如果不出意外,您可能希望将'init'设为私有并从构造函数中调用它。否则可以调用'factory'但忽略此步骤并假设不存在配置信息。另外 - 如果'configs'是静态的那么'$ this-> configs'似乎有点粗略。