在寫一個php原生函數的時候,想起使用thinkphp的C函數讀取數據庫配置很是方便,因而看了看源碼的實現,原理很簡單,分享一下:php
下面是common.php,實現了C函數:thinkphp
if(is_file("config.php") ) { // config.php文件返回一個數組 // C函數判斷是一個數組,則會將這個數組賦值給 $_config,下面咱們用在這個變量裏面讀取配置 C(include 'config.php'); } // 獲取配置值 function C($name=null, $value=null) { //靜態全局變量,後面的使用取值都是在 $)config數組取 static $_config = array(); // 無參數時獲取全部 if (empty($name)) return $_config; // 優先執行設置獲取或賦值 if (is_string($name)) { if (!strpos($name, '.')) { $name = strtolower($name); if (is_null($value)) return isset($_config[$name]) ? $_config[$name] : null; $_config[$name] = $value; return; } // 二維數組設置和獲取支持 $name = explode('.', $name); $name[0] = strtolower($name[0]); if (is_null($value)) return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null; $_config[$name[0]][$name[1]] = $value; return; } // include 'config.php' 返回的是一個數組,這個數組做爲C函數的參數,因此會跳到這裏,而後將數組的值返回給 $_config if (is_array($name)){ return $_config = array_merge($_config, array_change_key_case($name)); } return null; // 避免非法參數 }
使用方法很簡單:在須要使用C函數的地方 :數據庫
include 'common.php';數組
便可。函數