Maison >développement back-end >tutoriel php >L'avantage d'ajouter un espace de noms à PHP est de faciliter le chargement automatique
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';});通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。在引入命名空间之前:
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.
引入命名空间之后:
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其他类。这样,我们就不会为加载类而发愁了,极大地解放了我们的编程负担。
相关推荐:
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!