Maison titres Framework ThinkPHP5 illustré (3) : Interprétation du code source de la classe de configuration Config.php

Framework ThinkPHP5 illustré (3) : Interprétation du code source de la classe de configuration Config.php

May 18, 2017 am 10:31 AM
php thinkphp5

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 = &#39;_sys_&#39;;

    // 设定配置参数的作用域
    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 = &#39;&#39;, $name = &#39;&#39;, $range = &#39;&#39;)
    {
        $range = $range ?: self::$range;
        if (empty($type)) {
            $type = pathinfo($config, PATHINFO_EXTENSION);
        }
        $class = false !== strpos($type, &#39;\\&#39;) ? $type : &#39;\\think\\config\\driver\\&#39; . 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 = &#39;&#39;, $range = &#39;&#39;)
    {
        $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 (&#39;php&#39; == $type) {
                return self::set(include $file, $name, $range);
            } elseif (&#39;yaml&#39; == $type && function_exists(&#39;yaml_parse_file&#39;)) {
                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 = &#39;&#39;)
    {
        $range = $range ?: self::$range;

        if (!strpos($name, &#39;.&#39;)) {
            return isset(self::$config[$range][strtolower($name)]);
        } else {
            // 二维数组设置和获取支持
            $name = explode(&#39;.&#39;, $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 = &#39;&#39;)
    {
        $range = $range ?: self::$range;
        // 无参数时获取所有
        if (empty($name) && isset(self::$config[$range])) {
            return self::$config[$range];
        }

        if (!strpos($name, &#39;.&#39;)) {
            $name = strtolower($name);
            return isset(self::$config[$range][$name]) ? self::$config[$range][$name] : null;
        } else {
            // 二维数组设置和获取支持
            $name    = explode(&#39;.&#39;, $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 = &#39;&#39;)
    {
        $range = $range ?: self::$range;
        if (!isset(self::$config[$range])) {
            self::$config[$range] = [];
        }
        if (is_string($name)) {
            if (!strpos($name, &#39;.&#39;)) {
                self::$config[$range][strtolower($name)] = $value;
            } else {
                // 二维数组设置和获取支持
                $name                                                 = explode(&#39;.&#39;, $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 = &#39;&#39;)
    {
        $range = $range ?: self::$range;
        if (true === $range) {
            self::$config = [];
        } else {
            self::$config[$range] = [];
        }
    }
}
Copier après la connexion

二、源代码解读的思维导图:

Framework ThinkPHP5 illustré (3) : Interprétation du code source de la classe de configuration Config.php

三、思维导图文字说明:

配置类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格式

Framework ThinkPHP5 illustré (3) : Interprétation du code source de la classe de configuration Config.phpClasse de configuration Config.zip

[Recommandations associées]

1 Frame ThinkPHP5 illustré (1) : connaissances de base, spécifications de développement. et structure des répertoires

2. Cadre ThinkPHP5 illustré (2) : processus d'exécution et cycle de vie de l'application

3 Les 10 derniers en 2017 thinkphp. recommandation de didacticiel vidéo

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

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.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

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

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

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

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

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.

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

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

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

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

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

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

Guide rapide CakePHP Guide rapide CakePHP Sep 10, 2024 pm 05:27 PM

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.