引言
我正在创建自己的框架,实际上所有工作都很好。但我需要对这种情况发表意见。因此,我想创建一个可以通过代码升级的配置文件,"可升级" 我的意思是我可以更改运行的应用程序的配置。查看一个示例,因此我的默认config.php
文件是我的框架的基本配置,该文件位于根文件夹中。结构是这样的:
application <- APP file
system <- Framework file
config.php <- Framework base configuration
index.php
.htaccess
config.php
是一个看起来像这样的类:
class Config
{
const Language = 'english';
const DB_HOST = 'localhost';
}
在这个文件中,正如我所说,我是框架的基本配置。现在在我的application
文件夹中,我有一个包含另一个config.php
文件的目录,它是应用程序的一部分。
此文件包含一个数组,如下所示:
$config['LANGUAGE'] = defined('Config::Language') ? Config::LANGUAGE : 'english';
所以我只是检查基础config
文件中是否设置了特定的常量。
此文件由我的Setting
类使用,该类是我的Framework类的内容。
问题
我的所有请求均来自index.php
,在.htaccess我的规则RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
因此,如果我更改配置项的值,在application/config/config.php
中我可以看到当前实例中的值已更改,但是如果我重新加载页面,例如,我将获得在我的{设置的默认值我的config.php
文件夹的{1}}。发生这种情况导致application
类的实例每次都来自:
Settings
因此,每次刷新完成后,您都会看到我丢失了编辑内容。
我的index.php -> Framework load instance [Settings, Controller, Models, etc...] -> Logic Business
课程如下:
Settings
实践中的问题
该类在脚本中使用非常简单,为了使用它,我可以这样做:
class Settings
{
private static $_config = array();
function __construct()
{
$file = 'application/config/config.php';
include $file;
self::$_config = $config;
}
//set or update an item to the global config file
public static function setItem($name, $value)
{
self::$_config[$name] = $value;
}
//get a settings from the global config file
public static function getItem($name)
{
if(isset(self::$_config[$name]))
{
return self::$_config[$name];
}
}
}
输出将是:
echo Settings::getItem('LANGUAGE');
Settings::setItem('LANGUAGE', 'italian');
echo Settings::getItem('LANGUAGE');
但如果我刷新页面而不再次调用english
italian
,我甚至会看到setItem
被声明为默认值。这会丢弃为此类设计的所有逻辑。