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