Maison >développement back-end >tutoriel php >Analyse détaillée du mécanisme de chargement automatique du framework thinkPHP5.0

Analyse détaillée du mécanisme de chargement automatique du framework thinkPHP5.0

黄舟
黄舟original
2017-03-20 09:13:451683parcourir

Cet article présente principalement le framework thinkPHP5.0 chargement automatique et analyse plus en détail le concept, le principe, l'utilisation et les précautions du chargement automatique thinkPHP5.0 Friends. dans le besoin peuvent se référer à

Les exemples de cet article décrivent le mécanisme de chargement automatique du framework thinkPHP5.0. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Présentation

ThinkPHP5.0 réalise véritablement le chargement à la demande et toutes les bibliothèques de classes adopte un mécanisme de chargement automatique et prend en charge le mappage des bibliothèques de classes et le chargement automatique des bibliothèques de classes du compositeur.

L'implémentation du chargement automatique est complétée par la bibliothèque de classes thinkLoader, et la spécification de chargement automatique est conforme au PSR-4 de PHP.

Chargement automatique

Étant donné que la nouvelle version de ThinkPHP adopte entièrement la fonctionnalité de espace de noms, il vous suffit de définir correctement l'espace de noms où le La bibliothèque de classes est localisée. Si le chemin de l'espace de noms est cohérent avec le répertoire du fichier de bibliothèque de classes, alors le chargement automatique des classes peut être réalisé.

L'ordre de détection automatique du chargement des bibliothèques de classes est le suivant :

1. Détection automatique du chargement des bibliothèques de classes
2. -0 Détection de chargement automatique ;

Le système détectera dans l'ordre. Une fois la détection effectuée, le fichier de bibliothèque de classes correspondant sera automatiquement chargé.

Mappage de la bibliothèque de classes

Si vous suivez nos spécifications de définition d'espace de noms ci-dessus, le chargement automatique de la bibliothèque de classes peut essentiellement être terminé, mais si plus de noms sont définis S'il y a est moins d'espace, l'efficacité diminuera, nous pouvons donc définir des mappages de bibliothèques de classes pour les bibliothèques de classes couramment utilisées. Le mappage de bibliothèque de classes nommées équivaut à définir un alias pour le fichier de classe, ce qui est plus efficace que le positionnement de l'espace de noms, par exemple :

Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php');
Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');
Vous pouvez également utiliser la méthode addClassMap pour importer les définitions de mappage de bibliothèque de classes par lots. , par exemple :

$map = [
  'think\Log'   => LIB_PATH.'think\Log.php',
  'org\util\array'=> LIB_PATH.'org\util\Array.php'
];
Loader::addClassMap($map);
Bien que les classes enregistrées via le mappage de bibliothèques de classes ne doivent pas nécessairement correspondre aux répertoires d'espace de noms, il est toujours recommandé de suivre la spécification PSR-4 pour définir les bibliothèques de classes et les répertoires.

Importation de bibliothèque de classes

Si vous n'avez pas besoin de la fonction de chargement automatique du système, ou si vous n'utilisez pas d'espace de noms, vous pouvez également utiliser la méthode d'importation du Classe thinkLoader pour le charger manuellement Fichiers de bibliothèque de classes, par exemple :

Loader::import('org.util.array');
Loader::import('@.util.upload');
Exemple

// 引入 extends/qrcode.php
Loader::import('qrcode', EXTEND_PATH);
// 助手函数
import('qrcode', EXTEND_PATH);
// 引入 extends/wechat-sdk/wechat.class.php
Loader::import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
// 助手函数
import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
L'importation de bibliothèque de classes utilise également un concept d'espace de noms similaire (mais ne nécessite pas de prise en charge réelle de l'espace de noms) , l'espace de noms "racine" pris en charge comprend :

目录 说明
behavior 系统行为类库
think 核心基类库
traits 系统Traits类库
app 应用类库
@ 表示当前模块类库包


Si vous respectez pleinement la définition de l'espace de noms du système, d'une manière générale, il n'est pas nécessaire de charger manuellement le fichier de bibliothèque de classes et de simplement l'instancier directement.

Composer charge automatiquement

La version 5.0 prend en charge le chargement automatique des bibliothèques de classes installées par Composer. Vous pouvez les appeler directement en fonction de l'espace de noms dans la bibliothèque dépendante de Composer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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