

Framework ThinkPHP5 illustré (3) : Interprétation du code source de la classe de configuration Config.php
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格式
Classe de configuration Config.zip
[Recommandations associées]

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.