2015-08-26 45 views
0

我正在为类创建配置属性,但使它很容易可用我正在创建一个函数$key$value参数来设置配置选项。PHP:创建配置功能来设置或全局检索值

我设法得到部分解决它,但是这个代码是不加载系统中的所有配置的关键定义,但它只是加载的关键,如果我们定义的键后调用。

所以我怎么能做出这样的事情,所以我在哪里调用该函数将加载系统中的所有设置键不管。

调用函数来设置配置关键

// set very first key 
ss_config('use_ob', true); 
// debug 
do_print(ss_config()); // this is just a debugging function with pre and print_r 

//output (so here I want to load all set keys regardless either I am calling before or after set in the system) 
Array 
(
    [use_ob] => 1 
) 

设置另一个关键

// after above output I set this 
ss_config('hello', 'world'); 
// debug 
do_print(ss_config()); 

// output 
Array 
(
    [use_ob] => 1 
    [hello] => world 
) 

配置功能

/** 
* Global config settings 
* @param string $key config key 
* @param mixed $value config value for the key 
* 
* @return array 
*/ 
function ss_config($key = NULL, $value = NULL) 
{ 
    //$ss_config = qam_ss(); 

    if (isset($key) && isset($value)) { 
     qam_ss()->ss_config[ $key ] = $value; 
    } elseif (isset($key) && !isset($value)) { 
     qam_ss()->ss_config[ $key ]; 
    } 

    return qam_ss()->ss_config; 
} 

回答

1

编辑:我想我给你错了。为了适应任何课程中使用的原始代码,请参阅示例。

要创建一个基本的全局配置类,你可以创建一个类似于下面的内容:

class Foo 
{ 
    private $configData = array(); 

    public function getConfig($key = null) 
    { 
     if (is_null($key) { 
      return $this->configData; 
     } 

     if (isset($this->configData[$key]) { 
      return $this->configData[$key]; 
     } 
    } 

    public function setConfig($key, $value) 
    { 
     $this->configData[$key] = $value; 
    } 
} 

使用它像这样:

$fooClass->setConfig('foo', 'bar'); 
echo $fooClass->getConfig('foo'); // bar 
+0

感谢您的参考。那么你是否认为为'Config'创建单独的类而不仅仅是将属性添加到主类是个好主意?此外,我不是每次都要实例化类,我想让开发人员使用一个函数。所以如果我在函数中设置实例并且返回'$ config',我会在全局获取所有密钥吗? –

+0

@CodeLover查看编辑答案;分类功能通常更好。如果你想要一个全局配置存储,那最好保存为一个额外的类。如果您需要存储一些对您的课堂重要的值,请将其保存在上面的示例中。 如果你需要一个更精致的例子,来看看我的[Github上项目(https://github.com/Radiergummi/libconfig)。 –

+0

好吧,工作正常,但如果我想要所有注册的配置项目呢?其实,我看到的是,如果我调用没有键的配置,并且即使在定义键和值应该可用之前,我正在调用。如果你在我的代码中看到我设置'你好,world'项目是可用的,如果我把它叫做集之后,而不是在第一个'do_print' –