多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] * * * * * # 1 配置 >>配置,通常指的是存储框架运行基础信息的文件。 >框架启动的时候,加载配置文件,解析为框架运行基础信息。 >应用启动的时候,也会加载应用相应的配置文件,解析为应用运行基础信息。 >相对于缓存(Cache)。配置的作用周期只在当前请求。缓存则可以跨请求使用。 # 2 配置操作 ## 2-1 配置文件加载 ### Config::load() >>加载配置文件 ~~~ public static function load($file, $name = '', $range = '') { $range = $range ?: self::$range; if (!isset(self::$config[$range])) { self::$config[$range] = []; } if (is_file($file)) { $type = pathinfo($file, PATHINFO_EXTENSION); if ('php' != $type) { return self::parse($file, $type, $name, $range); } else { return self::set(include $file, $name, $range); } } else { return self::$config[$range]; } } ~~~ ### Config::parse() >>解析配置文件的内容, >根据不同类型的配置文件,创建不同的配置解析器。 >配置解析器的实现在(\Config\driver\)目录下,tp5内置了Ini,Json,xml等类型解析。 ~~~ public static function parse($config, $type = '', $name = '', $range = '') { $range = $range ?: self::$range; if (empty($type)) { $type = pathinfo($config, PATHINFO_EXTENSION); } $class = false !== strpos($type, '\\') ? $type : '\\think\\config\\driver\\' . ucwords($type); return self::set((new $class())->parse($config), $name, $range); } ~~~ ## 2-2 配置内容操作 ### Config::get() >>获取配置内容 ~~~ public static function get($name = null, $range = '') { $range = $range ?: self::$range; // 无参数时获取所有 if (empty($name) && isset(self::$config[$range])) { return self::$config[$range]; } if (!strpos($name, '.')) { $name = strtolower($name); return isset(self::$config[$range][$name]) ? self::$config[$range][$name] : null; } else { // 二维数组设置和获取支持 $name = explode('.', $name); $name[0] = strtolower($name[0]); return isset(self::$config[$range][$name[0]][$name[1]]) ? self::$config[$range][$name[0]][$name[1]] : null; } } ~~~ ### Config::set() >>设置配置内容 ~~~ public static function set($name, $value = null, $range = '') { $range = $range ?: self::$range; if (!isset(self::$config[$range])) { self::$config[$range] = []; } if (is_string($name)) { if (!strpos($name, '.')) { self::$config[$range][strtolower($name)] = $value; } else { // 二维数组设置和获取支持 $name = explode('.', $name); self::$config[$range][strtolower($name[0])][$name[1]] = $value; } return; } elseif (is_array($name)) { // 批量设置 if (!empty($value)) { self::$config[$range][$value] = isset(self::$config[$range][$value]) ? array_merge(self::$config[$range][$value], $name) : self::$config[$range][$value] = $name; return self::$config[$range][$value]; } else { return self::$config[$range] = array_merge(self::$config[$range], array_change_key_case($name)); } } else { // 为空直接返回 已有配置 return self::$config[$range]; } } ~~~ ### Config::reset() >>重置配置为空 ~~~ public static function reset($range = '') { $range = $range ?: self::$range; if (true === $range) { self::$config = []; } else { self::$config[$range] = []; } } ~~~ ### Config::has() >>检查配置是否存在 ~~~ public static function has($name, $range = '') { $range = $range ?: self::$range; if (!strpos($name, '.')) { return isset(self::$config[$range][strtolower($name)]); } else { // 二维数组设置和获取支持 $name = explode('.', $name); return isset(self::$config[$range][strtolower($name[0])][$name[1]]); } } ~~~ ## 2-3 配置作用域 >>可以修改配置作用域。实现配置的特定场景使用 ### Config::range() >>修改当前配置作用域 ~~~ public static function range($range) { self::$range = $range; if (!isset(self::$config[$range])) { self::$config[$range] = []; } } ~~~ # 3 内置配置解析器 ## 3-1 Ini配置解析器 ### $iniconfig->parse() >>解析Ini配置文件 ~~~ public function parse($config) { if (is_file($config)) { return parse_ini_file($config, true); } else { return parse_ini_string($config, true); } } ~~~ ## 3-2 Json配置解析器 ### $jsonconfig->parse() >>解析Json配置文件 ~~~ public function parse($config) { if (is_file($config)) { $config = file_get_contents($config); } $result = json_decode($config, true); return $result; } ~~~ ## 3-3 Xml配置解析器 ### $xmlconfig->parse() >>解析Xml配置文件 ~~~ public function parse($config) { if (is_file($config)) { $content = simplexml_load_file($config); } else { $content = simplexml_load_string($config); } $result = (array) $content; foreach ($result as $key => $val) { if (is_object($val)) { $result[$key] = (array) $val; } } return $result; } ~~~