ThinkPHP5的配置非常重要,将会影响到整个应用的生命周期,TP5中的配置类Config.php,代码非常的简洁。
在教学过程中,发现很多的同学,都不愿意去看框架源码,认为会用就行,其实这种观点是错误的。
如果想快速提高自己的框架开发水平,阅读源码是最快的路径,其实源码没有大家想象的晦涩难懂。
从本课起,我将带着大家一起,慢慢的把ThinkPHP5的主要类的源码快速过一遍。相信学完后,,你会有:【哇,原来如此~~】的感觉!
本课先讲一个配置类Config.php的源码,该类文件位于: 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 = []; // 参数作用域 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); 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)) { $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]; } } /** * 检测配置是否存在 * @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; 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] = []; } } }
二、源代码解读的思维导图:
三、思维导图文字说明:
配置类Config.php
1 位置:thinkphp/library/think/Config.php
2 属性(2个)
2.1 private static $config = [];
2.1.1 内容:配置参数
2.1.2 访问类型:私有静态,仅限类中静态方法用self::访问
2.1.3 接受值类型:Array数组
2.2 private static $range = '_sys_';
2.2.1 内容:配置参数的作用域
2.2.2 访问类型:私有静态,仅限类中静态方法用self::访问
2.2.3 接受值类型:String字符串
3 方法(7个)
3.1 public static function range($range)
3.1.1 功能:设定配置参数的作用域
3.1.2 访问类型:公共静态,供外部用类名Config::访问
3.1.3 输入参数:$range,string类型,表示配置作用域的字符串
3.1.4 返回结果:给配置作用域属性$rang赋值
3.2 public static function parse($config, $type = '', $name = '', $range = '')
3.2.1 功能:解析配置文件或内容
3.2.2 访问类型:公共静态,供外部用类名Config::访问
3.2.3 输入参数
3.2.3.1 string $config 配置文件路径或内容
3.2.3.2 string $type 配置解析类型
3.2.3.3 string $name 配置名(如设置即表示二级配置)
3.2.3.4 string $range 作用域
3.2.4 返回结果:mixed 不确定类型或任何类型
3.3 public static function load($file, $name = '', $range = '')
3.3.1 功能:加载配置文件(PHP格式)
3.3.2 访问类型:公共静态,供外部用类名Config::访问
3.3.3 输入参数
3.3.3.1 string $file 配置文件名
3.3.3.2 string $name 配置名(如设置即表示二级配置)
3.3.3.3 string $range 作用域
3.3.4 返回结果:mixed 不确定类型或任何类型
3.4 public static function has($name, $range = '')
3.4.1 功能:检测配置是否存在
3.4.2 访问类型:公共静态,供外部用类名Config::访问
3.4.3 输入参数
3.4.3.1 $name 配置参数名(支持二级配置 .号分割)
3.4.3.2 string $range 作用域
3.4.4 返回结果:bool布尔类型,存在为true,否则为false
3.5 public static function get($name = null, $range = '')
3.5.1 功能:获取配置参数 为空则获取所有配置
3.5.2 访问类型:公共静态,供外部用类名Config::访问
3.5.3 输入参数
3.5.3.1 string $name 配置参数名(支持二级配置 .号分割)
3.5.3.2 string $range 作用域
3.5.4 返回结果:mixed 不确定类型或任何类型
3.6 public static function set($name, $value = null, $range = '')
3.6.1 功能:设置配置参数 name为数组则为批量设置
3.6.2 访问类型:公共静态,供外部用类名Config::访问
3.6.3 输入参数
3.6.3.1 string|array $name 配置参数名(支持二级配置 .号分割)
3.6.3.2 mixed $value 配置值
3.6.3.3 string $range 作用域
3.6.4 返回结果:mixed 不确定类型或任何类型
3.7 public static function reset($range = '')
3.7.1 功能:重置配置参数
3.7.2 访问类型:公共静态,供外部用类名Config::访问
3.7.3 输入参数:string $range 作用域
3.7.4 返回结果:self::$config=[];//清空配置数组
四、思维导图源文件下载:xmind格式
[관련 권장 사항]

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

WebStorm Mac 버전
유용한 JavaScript 개발 도구
