1 TP5框架Config类源码分析选学内容推荐观看

框架配置类文件:Config.php详解(选学)

Config.php的目录在(C:\www\tp5\thinkphp\library\think)

Config.php 因为首字母是大写,所以是类文件

//下面是复制Config.php的源码:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

namespace think;

class Config
{
// 配置参数
private static $config = [];//访问:self::静态成员  //外部访问:Config::静态成员    (我加的)
// 参数作用域
private static $range = '_sys_';//访问:self::静态成员 (我加的)

// 设定配置参数的作用域
public static function range($range)
{
self::$range = $range;
if (!isset(self::$config[$range])) {
self::$config[$range] = [];
}
}

/**
* 解析配置文件或内容(public static function parse)
* @param string    $config 配置文件路径或内容
* @param string    $type 配置解析类型
* @param string    $name 配置名(如设置即表示二级配置)
* @param string    $range  作用域
* @return mixed
*/
public static function parse($config, $type = '', $name = '', $range = '')  //外部访问:Config::静态成员
{
$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);
}

/**
* 加载配置文件(PHP格式)(public static function load)
* @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)) {
$name = strtolower($name);
$type = pathinfo($file, PATHINFO_EXTENSION);
if ('php' == $type) {
return self::set(include $file, $name, $range);
} elseif ('yaml' == $type && function_exists('yaml_parse_file')) {
return self::set(yaml_parse_file($file), $name, $range);
} else {
return self::parse($file, $type, $name, $range);
}
} else {
return self::$config[$range];
}
}

/**
* 检测配置是否存在(public static function has)
* @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]]);
}
}

/**
* 获取配置参数 为空则获取所有配置(public static function get)
* @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为数组则为批量设置(public static function set)
* @param string|array  $name 配置参数名(支持二级配置 .号分割)
* @param mixed         $value 配置值
* @param string        $range  作用域
* @return mixed
*/
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];
}
}

/**
* 重置配置参数
*/
public static function reset($range = '')
{
$range = $range ?: self::$range;
if (true === $range) {
self::$config = [];
} else {
self::$config[$range] = [];
}
}
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 理工寝室商店-微信小程序 疑问小结 当时在XAMMP下mysql目录下的bin下 php -v 不起作用.到ph...
    这个超人不会飞阿阅读 1,832评论 1 1
  • 安装配置 官网下载TP5完整版(初学者学习用的)解压到本地的开发环境phpstudy中,默认的入口文件是publi...
    我要挖0day阅读 42,904评论 3 56
  • 控制器 新建控制器的定义 1/声明命名空间 app\模块\controller 2/控制器文件名首字母大写,采用驼...
    机器不能学习阅读 1,700评论 0 4
  • 那个地方,与你的青春有关写满了欢笑与忧伤 在那里,你们相遇、又相知相爱、又相离 那是一个你十分熟识的地方以至于你清...
    爱在岁月里荒芜阅读 251评论 0 0
  • 父母跟孩子沟通,不能只是告诉孩子,什么是对的,什么该做,让孩子按照父母的建议去做,这样,只能解决一时的问题,无法解...
    伶丽阅读 217评论 0 2

友情链接更多精彩内容