#### 系統(tǒng)配置類
在整個網(wǎng)站的運行過程中,經(jīng)常需要用到系統(tǒng)配置文件,比如說數(shù)據(jù)庫配置,需要經(jīng)常進行讀取,所以,寫一個系統(tǒng)配置類是必要的,在這個配置類中,我們可以動態(tài)操作配置文件,設(shè)計的時候,模仿TP的C函數(shù),首先在公共函數(shù)中定義一個C函數(shù),
``function C(){
$conf = \S\Config::getInstance(); //獲取配置類的單例
$args = func_get_args(); //獲取函數(shù)中傳進來的參數(shù)
switch (func_num_args()) { //獲取傳進來的參數(shù)的個數(shù)
case 0: //0個參數(shù),讀取全部配置
return $conf->get(); //返回config對象的get方法結(jié)果
break;
case 1: //一個參數(shù),則為讀取配置信息的值,如果是數(shù)組,為動態(tài)設(shè)置配置信息的值
if (is_array($args[0])){
return $conf->setAll($args[0]); //返回config對象的setAll方法結(jié)果
}
return $conf->get($args[0]); //如果不是數(shù)組,就是獲取該配置信息的值
break;
case 2: //兩個參數(shù),為設(shè)置配置信息的值
return $conf->set($args[0],$args[1]);
break;
default:
break;
}
}``
首先獲取配置類的單例,然后根據(jù)傳入?yún)?shù)的個數(shù),調(diào)用不同這個類中不同的方法,是獲取還是設(shè)置信息。
###### 在配置類中實現(xiàn)方法:
~~~
~~~``<?php
namespace S;
class Config{
//這個數(shù)組是用來存放配置值的
private $config=[];
//這個變量用來存放單例的
private static $instance;
public static function getInstance(){ //單例模式
if (!(self::$instance instanceof self)) { //判斷現(xiàn)在的$instance是否是自身類的一個實例
self::$instance = new self; //如果不是的話,證明這個類從來沒有實例化過,那么就實例化自己
}
return self::$instance; //如果是的話,就返回這個$instance,這個類的實例,這樣就能保證在整個程序運行過程中都只有一個Config類的實例,可以節(jié)約資源,這就是單例模式
}
/**
* Config constructor. 構(gòu)造函數(shù) 創(chuàng)建實例時就引入配置文件,并合并,給$config賦值
*/
private function __construct(){ //在實例化這個類的時候 就會調(diào)用這個構(gòu)造函數(shù)
$sys_conf = []; //系統(tǒng)配置數(shù)組
$user_conf = []; //用戶配置數(shù)組
//系統(tǒng)配置文件
if (file_exists(SYS_CONFIG)){ //如果S-Framework中定義過的系統(tǒng)配置文件路徑存在且有效的話,則把這個文件包含進來
$sys_conf = include(SYS_CONFIG);
}
//用戶配置文件
if (file_exists(USER_CONFIG)){ //如果S-Framework中定義過的用戶配置文件路徑存在且有效的話,則把這個文件包含進來
$user_conf = include(USER_CONFIG);
}
return $this->config = array_merge($sys_conf,$user_conf); //把用戶配置和系統(tǒng)配置合并在同一個數(shù)組里,使用戶配置覆蓋掉相同的系統(tǒng)配置,這樣就實現(xiàn)了用戶的自定義配置
}
/**
* @return array 獲取config文件中的數(shù)據(jù)
*/
public function get($parm = null){
$value = [];
if (isset($this->config) && empty($parm)){ //如果沒有參數(shù)傳進來的話,就返回整個config數(shù)組(config數(shù)組在構(gòu)造函數(shù)中獲得過值)
return $this->config;
}
if (isset($this->config[$parm])){ //如果有參數(shù)傳進來的話,就在config數(shù)組中尋找鍵值是這個參數(shù)的配置項,并將其返回
return $this->config[$parm];
}else{
echo 'config參數(shù)錯誤';
}
}
public function setAll($arr){ //批量設(shè)置配置項
if (is_array($arr)){ //如果傳進來的參數(shù)是一個數(shù)組的話
foreach ($arr as $key => $value) { //就遍歷這個數(shù)組,每遍歷一個鍵值對,就調(diào)用一次set方法,把鍵與值作為參數(shù)傳遞進去
$this->set($key,$value); //使得每一個鍵值對都成為一個配置項,然后返回true,證明執(zhí)行成功
}
return true;
}else{
return false; //如果傳進來的參數(shù)不是數(shù)組,就返回false,證明執(zhí)行失敗
}
}
public function set($keys,$values){ //設(shè)置配置數(shù)組的值
$this->config[$keys] = $values; //使傳進來的兩個參數(shù)的鍵與值對應(yīng)
return true;
}
} ``
以上就是系統(tǒng)配置類,現(xiàn)在我們重新看開始的C()函數(shù),首先獲取Config類的對象,然后根據(jù)需要調(diào)用不同的方法,達到設(shè)置與獲取配置項的目的。