栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP > php开源框架 > thinkphp

配置操作 - TP5源代码阅读

thinkphp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

配置操作 - TP5源代码阅读



[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()

>>解析配置文件的内容,
>根据不同类型的配置文件,创建不同的配置解析器。
>配置解析器的实现在(Configdriver)目录下,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;
}





转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/213760.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号