config.php,Config.php

1

// +----------------------------------------------------------------------

// | ThinkPHP [ WE CAN DO IT JUST THINK ]

// +----------------------------------------------------------------------

// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: liu21st

// +----------------------------------------------------------------------

namespace think;

class Config

{

// 配置参数

private static $config = [];// 这里的 static 设置的 比较出神入化

// 参数作用域

private static $range = '_sys_';// 同上

// 设定配置参数的作用域

public static function range($range)

{

self::$range = $range;// 初始化, 范围

if (!isset(self::$config[$range])) {// 如果不存在,就 初始化为空

self::$config[$range] = [];// 默认设置 初始化 为空

}

}

/**

* 解析配置文件或内容

* @param string    $config 配置文件路径或内容

* @param string    $type 配置解析类型

* @param string    $name 配置名(如设置即表示二级配置)

* @param string    $range  作用域

* @return mixed

*/

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);

// 获取 解析 类文件 分别对应为 ini \ json \ xml 类文件 方式 解析 文件

return self::set((new $class())->parse($config), $name, $range);// 解析配置文件

}

/**

* 加载配置文件(PHP格式)

* @param string    $file 配置文件名

* @param string    $name 配置名(如设置即表示二级配置)

* @param string    $range  作用域

* @return mixed

*/

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);// 解析 默认的 文件 ini xml json

} else {

return self::set(include $file, $name, $range);// 获取文件

}

} else {

return self::$config[$range];// 直接返回数据

}

}

/**

* 检测配置是否存在

* @param string    $name 配置参数名(支持二级配置 .号分割)

* @param string    $range  作用域

* @return bool

*/

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]]);

}

}// 检测 是否 有这个 配置 选项

/**

* 获取配置参数 为空则获取所有配置

* @param string    $name 配置参数名(支持二级配置 .号分割)

* @param string    $range  作用域

* @return mixed

*/

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;

}// 返回二维 数组

}

/**

* 设置配置参数 name为数组则为批量设置

* @param string|array  $name 配置参数名(支持二级配置 .号分割)

* @param mixed         $value 配置值

* @param string        $range  作用域

* @return mixed

*/

public static function set($name, $value = null, $range = '')

{

$range = $range ?: self::$range;// 进行 设置 范围圈定,默认的是 _sys_ 系统配置项目

if (!isset(self::$config[$range])) {// 如果设置了 self::$config 没有设置这个,

self::$config[$range] = [];// 默认的  初始化 为空

}

if (is_string($name)) {// 如果是字符串 默认就是key

if (!strpos($name, '.')) {// 如果没有.

self::$config[$range][strtolower($name)] = $value;// self::

} else {

// 二维数组设置和获取支持

// 最大支持到二维数组

$name                                                 = explode('.', $name);

self::$config[$range][strtolower($name[0])][$name[1]] = $value;

}

return;

} elseif (is_array($name)) {

// 批量设置

if (!empty($value)) {// 如果 value 有数值 此处的 value 变成了 key

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];// 很喜欢 这个风格 跟调调,哈哈

}

}

/**

* 重置配置参数

*/

public static function reset($range = '')

{// 这个是 个重量级的 函数啊,

$range = $range ?: self::$range;// 查看是否存在范围

if (true === $range) {// 如果 传入了 真 清空一切

self::$config = [];

} else {

self::$config[$range] = [];// 否则  清空 指定对象

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值