如何创建可升级的全局配置文件

时间:2016-08-13 08:34:14

标签: php

引言

我正在创建自己的框架,实际上所有工作都很好。但我需要对这种情况发表意见。因此,我想创建一个可以通过代码升级的配置文件,"可升级" 我的意思是我可以更改运行的应用程序的配置。查看一个示例,因此我的默认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被声明为默认值。这会丢弃为此类设计的所有逻辑。

0 个答案:

没有答案