Maison développement back-end tutoriel php Explication détaillée du code de l'espace de noms du framework thinkPHP5.0

Explication détaillée du code de l'espace de noms du framework thinkPHP5.0

Mar 20, 2017 am 09:11 AM
thinkphp5.0 命名空间

Cet article présente principalement le framework thinkPHP5.0 espace de noms et analyse en détail les concepts, les fonctions et les méthodes d'utilisation associées des espaces de noms dans thinkPHP5.0 sur la base d'exemples spécifiques. suivant

Les exemples de cet article décrivent l'espace de noms du framework thinkPHP5.0. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Espace de noms

ThinkPHP utilise la définition d'espace de noms et le chargement automatique des fichiers de bibliothèque de classe , ce qui est efficace. Il résout le problème de conflit d'espace de noms entre plusieurs modules et Composerbibliothèque de classes et implémente un mécanisme de chargement automatique plus efficace des bibliothèques de classes.

Si vous n'êtes pas clair sur le concept de base de l'espace de noms, vous pouvez vous référer au Manuel PHP : Espace de noms PHP

Attention particulière Oui, Si vous devez appeler la bibliothèque de classes intégrée à PHP, ou une bibliothèque de classes tierce qui n'utilise pas l'espace de noms, pensez à ajouter lors de l'instanciation de la bibliothèque de classes, par exemple :

// 错误的用法
$class = new stdClass();
$xml = new SimpleXmlElement($xmlstr);
// 正确的用法
$class = new \stdClass();
$xml = new \SimpleXmlElement($xmlstr);
Copier après la connexion

Dans ThinkPHP5.0, il vous suffit de définir correctement l'espace de noms où se trouve la bibliothèque de classes, et le chemin de l'espace de noms est cohérent avec le répertoire du fichier de bibliothèque de classes, vous pouvez alors réaliser chargement automatique des classes , réalisant ainsi un véritable chargement paresseux.

Par exemple, la classe thinkcachedriverFile est définie comme :

namespace think\cache\driver;
class File
{
}
Copier après la connexion

Si nous instancions cette classe, elle devrait être :

$class = new \think\cache\driver\File();
Copier après la connexion
Copier après la connexion

Le système chargera automatiquement le classe correspondante Le chemin du fichier de classe est thinkphp/library/think/cache/driver/File.php.

La spécification de répertoire par défaut de la version 5.0 est en minuscules, le nom des fichiers de classe est en casse chameau et la première lettre est en majuscule.

En principe, les répertoires nommés en casse chameau peuvent être supportés, à condition que la définition de l'espace de noms soit cohérente avec le répertoire , par exemple :

On instancie

$class = new \think\cache\driver\File();
Copier après la connexion
Copier après la connexion

Le système chargera automatiquement le fichier thinkphp/library/Think/Cache/Driver/File.php.

Espace de noms racine (package de bibliothèque de classes)

L'espace de noms racine est un concept clé. En prenant la classe thinkcachedriverFile ci-dessus comme exemple, think est un espace de noms racine correspondant. Le répertoire d'espace de noms initial est le répertoire de la bibliothèque de classes du système (thinkphp/library/think). On peut simplement comprendre qu'un espace de noms racine correspond à un package de bibliothèque de classes.

Plusieurs espaces de noms racine (packages de bibliothèques de classes) intégrés au système sont les suivants :

名称描述类库目录
think系统核心类库thinkphp/library/think
traits系统Trait类库thinkphp/library/traits
app应用类库application


如果需要增加新的根命名空间,有两种方式:注册新的根命名空间或者放入EXTEND_PATH目录(自动注册)

请注意本文中的示例代码为了简洁,如无指定类库的命名空间的话,都表示指的是think命名空间,例如下面的代码:

Route::get('hello','index/hello');
Copier après la connexion

请自行使用:

use think\Route
Copier après la connexion

或者:

\think\Route::get('hello','index/hello');
Copier après la connexion

自动注册

我们只需要把自己的类库包目录放入EXTEND_PATH目录(extend,可配置),就可以自动注册对应的命名空间,例如:

我们在extend目录下面新增一个my目录,然后定义一个\my\Test类( 类文件位于extend/my/Test.php)如下:

namespace my;
class Test
{
 public function sayHello()
 {
  echo 'hello';
 }
}
Copier après la connexion

我们就可以直接实例化和调用:

$Test = new \my\Test();
$Test->sayHello();
Copier après la connexion

如果我们在应用入口文件中重新定义了EXTEND_PATH常量的话,还可以改变\my\Test类文件的位置,例如:

define('EXTEND_PATH','../vendor/');
Copier après la connexion

那么\my\Test类文件的位置就变成了/vendor/my/File.php。

手动注册

也可以通过手动注册的方式注册新的根命名空间,例如:

在应用入口文件中添加下面的代码:

\think\Loader::addNamespace('my','../application/extend/my/');
Copier après la connexion

如果要同时注册多个根命名空间,可以使用:

\think\Loader::addNamespace([
 'my' => '../application/extend/my/',
 'org' => '../application/extend/org/',
]);
Copier après la connexion

也可以直接在应用的配置文件中添加配置,系统会在应用执行的时候自动注册。

'root_namespace' => [
 'my' => '../application/extend/my/',
 'org' => '../application/extend/org/',
]
Copier après la connexion

应用类库包

为了避免和Composer自动加载的类库存在冲突 ,应用类库的命名空间的根都统一以app命名,例如:

namespace app\index\model;
class User extends \think\Model
{
}
Copier après la connexion

其类文件位于 application/index/model/User.php。

namespace app\admin\Event;
class User
{
}
Copier après la connexion

其类文件位于 application/admin/event/User.php。

如果觉得app根命名空间不合适或者有冲突,可以在应用配置文件中修改:

'app_namespace' => 'application',
Copier après la connexion

定义后,应用类库的命名空间改为:

namespace application\index\model;
class User extends \think\Model
{
}
Copier après la connexion

命名空间别名

框架允许给命名空间定义别名,例如:

namespace app\index\model;
use think\Model;
class User extends Model
{
}
Copier après la connexion

原来在控制器里面调用方式为:

namespace app\index\controller;
use app\index\model\User;
class Index
{
 public function index()
 {
  $user = new User();
 }
}
Copier après la connexion

如果我们在应用公共文件中注册命名空间别名如下:

\think\Loader::addNamespaceAlias('model','app\index\model');
Copier après la connexion

那么,上面的控制器代码就可以更改为:

namespace app\index\controller;
use model\User;
class Index
{
 public function index()
 {
  $user = new User();
 }
}
Copier après la connexion

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 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)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

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)

Résoudre l'erreur PHP : la classe d'espace de noms spécifiée n'a pas été trouvée Résoudre l'erreur PHP : la classe d'espace de noms spécifiée n'a pas été trouvée Aug 18, 2023 pm 11:28 PM

Résoudre l'erreur PHP : la classe d'espace de noms spécifiée n'a pas été trouvée lors du développement avec PHP, nous rencontrons souvent divers messages d'erreur. L'une des erreurs courantes est "La classe d'espace de noms spécifiée n'a pas été trouvée". Cette erreur est généralement provoquée par le fait que le fichier de classe importé n’est pas correctement référencé dans l’espace de noms. Cet article explique comment résoudre ce problème et fournit quelques exemples de code. Tout d’abord, examinons un exemple de message d’erreur courant : Fatalerror:UncaughtError:C.

Comment utiliser l'espace de noms dans le framework F3 ? Comment utiliser l'espace de noms dans le framework F3 ? Jun 03, 2023 am 08:02 AM

Le framework F3 est un framework PHPWeb simple, facile à utiliser, flexible et extensible. Son mécanisme d'espace de noms (Namespace) nous offre une structure de code plus standardisée, plus lisible et plus claire. Dans cet article, nous explorerons comment utiliser les espaces de noms dans le framework F3. 1. Qu'est-ce qu'un espace de noms ? Les espaces de noms sont souvent utilisés pour résoudre le problème des conflits de noms en PHP. Ils peuvent encapsuler une ou plusieurs classes, fonctions ou constantes dans un espace de noms, ce qui équivaut à leur ajouter un préfixe. exemple

Idées de conception et méthodes de mise en œuvre de l'espace de noms Redis et du mécanisme d'expiration Idées de conception et méthodes de mise en œuvre de l'espace de noms Redis et du mécanisme d'expiration May 11, 2023 am 10:40 AM

Redis est une base de données de stockage clé-valeur open source et hautes performances. Lorsque nous utilisons Redis pour le stockage de données, nous devons prendre en compte la conception de l'espace de noms des clés et du mécanisme d'expiration afin de maintenir les performances et l'intégrité des données de Redis. Cet article présentera les idées de conception et les méthodes d'implémentation de l'espace de noms et du mécanisme d'expiration de Redis. 1. Idées de conception d'espace de noms Redis Dans Redis, les clés peuvent être définies arbitrairement. Afin de faciliter la gestion et la distinction des différents types de données, Redis introduit le concept d'espace de noms. vie

Erreur de syntaxe C++ : espace de noms non défini utilisé, comment y remédier ? Erreur de syntaxe C++ : espace de noms non défini utilisé, comment y remédier ? Aug 21, 2023 pm 09:49 PM

Le C++ est un langage de programmation de haut niveau largement utilisé. Il présente une grande flexibilité et évolutivité, mais il oblige également les développeurs à maîtriser strictement ses règles grammaticales pour éviter les erreurs. L'une des erreurs courantes est "l'utilisation d'un espace de noms non défini". Cet article explique ce que signifie cette erreur, pourquoi elle se produit et comment la corriger. 1. À quoi sert un espace de noms non défini ? En C++, les espaces de noms sont un moyen d'organiser du code réutilisable afin de le garder modulaire et lisible. Les fonctions portant le même nom peuvent être créées à l'aide d'espaces de noms

Exemple de nouveautés en PHP8 : Comment utiliser les espaces de noms et les codes pour mieux organiser la structure du code ? Exemple de nouveautés en PHP8 : Comment utiliser les espaces de noms et les codes pour mieux organiser la structure du code ? Sep 11, 2023 pm 12:22 PM

Exemple de nouveautés en PHP8 : Comment utiliser les espaces de noms et les codes pour mieux organiser la structure du code ? Introduction : PHP8 est une version importante du langage de programmation PHP, qui introduit de nombreuses nouvelles fonctionnalités et améliorations intéressantes. L’une des nouvelles fonctionnalités les plus importantes concerne les espaces de noms. Les espaces de noms sont un moyen d'organiser votre code dans une meilleure structure qui évite les conflits entre les classes, les fonctions et les constantes portant le même nom. Dans cet article, nous verrons comment exploiter les espaces de noms et les codes pour mieux structurer votre code PHP8.

Méthodes pour résoudre les erreurs d'espace de noms PHP et générer les invites d'erreur correspondantes Méthodes pour résoudre les erreurs d'espace de noms PHP et générer les invites d'erreur correspondantes Aug 07, 2023 pm 05:16 PM

Comment résoudre les erreurs d'espace de noms PHP et générer les messages d'erreur correspondants. PHP est un langage de script côté serveur largement utilisé pour développer des applications Web. En PHP, l'espace de noms est un mécanisme de gestion et d'organisation du code, qui peut éviter les conflits de noms et améliorer la lisibilité et la maintenabilité du code. Cependant, en raison de la complexité de la définition et de l'utilisation des espaces de noms, des erreurs se produisent parfois. Cet article présentera quelques méthodes pour résoudre les erreurs d'espace de noms PHP et générer les invites d'erreur correspondantes. 1. Espace de nom

Une odyssée de l'espace de noms : explorer le paradis modulaire de PHP Une odyssée de l'espace de noms : explorer le paradis modulaire de PHP Mar 10, 2024 am 09:04 AM

Espaces de noms : le paradis de la modularité Dans le développement de logiciels, la maintenabilité est un facteur crucial. À mesure que votre base de code continue de croître, l'organisation et l'encapsulation de votre code sont essentielles à la gestion de la complexité. Les espaces de noms en PHP sont conçus à cet effet. Concept d'espace de noms Un espace de noms est une collection d'identifiants logiquement liés. Il fournit un mécanisme pour organiser les classes, les fonctions et les constantes dans des domaines spécifiques. Les espaces de noms éliminent les conflits de noms en attribuant à chaque entité un nom unique, empêchant ainsi différentes classes ou fonctions d'avoir le même nom. La syntaxe de l'espace de noms est en PHP. L'espace de noms est défini à l'aide d'une barre oblique inverse () : namespaceMyProjectDatabase ;

Nouvelle fonctionnalité de PHP 5.4 : Comment utiliser les alias d'espace de noms pour simplifier les appels de noms de classe Nouvelle fonctionnalité de PHP 5.4 : Comment utiliser les alias d'espace de noms pour simplifier les appels de noms de classe Jul 29, 2023 pm 11:45 PM

Nouvelles fonctionnalités de PHP 5.4 : Comment utiliser les alias d'espace de noms pour simplifier les appels de noms de classe. La fonction d'espace de noms introduite dans PHP 5.3 nous offre une meilleure façon d'organiser et de gérer le code. En organisant les classes, fonctions et constantes associées dans des espaces de noms, les conflits de noms entre différents modules peuvent être efficacement évités. Dans la version PHP5.4, la fonction d'alias d'espace de noms (namespacealias) a été introduite, ce qui facilite encore plus nos appels et

See all articles