2015-08-26 46 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' –