L'avantage d'ajouter un espace de noms à PHP est de faciliter le chargement automatique

不言
Libérer: 2023-03-25 11:08:02
original
1516 Les gens l'ont consulté

Cet article présente principalement les avantages de l'ajout d'espaces de noms à PHP pour faciliter le chargement automatique. Il a maintenant une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

A. Projet PHP, il n'y a généralement qu'un seul fichier d'entrée index.php Nous écrivons généralement une fonction de chargement automatique dans ce fichier d'entrée pour nécessiter des fichiers de classe qui seront instanciés à l'avenir. Par exemple :

spl_autoload_register(function ($className) {    require 'class/' . $className . '.php';});通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。在引入命名空间之前:
Copier après la connexion

Notre répertoire de projets

index.php

Contrôleur .php

Dans index.php, nous devons instancier une classe Controller dans le répertoire du contrôleur et appeler la méthode model() de cet objet, et cette méthode doit instancier une classe Model Model dans l'annuaire. Lançons index.php :

Avertissement : require(controller/Model.php) : échec d'ouverture du flux : aucun fichier ou répertoire de ce type

Il indique qu'il n'existe aucun fichier ou répertoire de ce type. La raison est très simple : lorsque PHP utilise new Model(), il va automatiquement dans le répertoire du contrôleur requis, il est donc introuvable.

Alors, comment notre fonction de chargement automatique devrait-elle être écrite pour résoudre le problème ? Évidemment, changer 'controller/' en 'model/' ou ne pas écrire le répertoire ne se chargera pas correctement. Par conséquent, les avantages de l’utilisation des espaces de noms émergent.

引入命名空间之后:
Copier après la connexion

index.php

 

Controller.php

 

 

Model.php

我们按照文件目录的结构来为每个类写入命名空间,当在一个类中需要实例化另外一个类时,IDE会帮我们写入use namespace ;  。这样,我们在写自动加载的时候,就不用考虑将要加载的类在哪一个文件目录下了,只需要这样写:

spl_autoload_register(function ($class) {    require $class . '.php';});因为我们在index.php中use了所用到的类的命名空间,自动加载函数会到相应的命名空间中去寻找类(上述代码中的$class就相当于是'controller\Controller'),而这些类中又需要实例化其他的类,因为这些类中也声明了use 其他类的命名空间 ;,所以自动加载函数又会去相应的命名空间中去require其他类。这样,我们就不会为加载类而发愁了,极大地解放了我们的编程负担。
Copier après la connexion

相关推荐:

无需重新编译php加入ftp扩展的方法

PHP加入数据程序的具体实现方法

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal