Maison  >  Article  >  développement back-end  >  Explication détaillée des exemples de chargement automatique PHP

Explication détaillée des exemples de chargement automatique PHP

零下一度
零下一度original
2017-07-23 13:24:251722parcourir

Un projet PHP n'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 dans le futur. Par exemple :

<span style='font-family: "courier new", courier; font-size: 14px'>spl_autoload_register(function ($className) {</span><br><span style='font-family: "courier new", courier; font-size: 14px'>    require 'class/' . $className . '.php';</span><br><span style='font-family: "courier new", courier; font-size: 14px'>});</span><br><br><span style='font-family: "Microsoft YaHei"; font-size: 14px'>通过以上的代码,我们发现:在自动加载时,我们需要指定存放类的文件夹,以便找到相应的类。那么问题产生了。</span><br><br><strong><span style="font-size: 18px; background-color: #339966">在引入命名空间之前:</span></strong>

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

Nous écrivons l'espace de noms pour chaque classe en fonction de la structure des répertoires de fichiers Lorsque nous avons besoin d'instancier une autre classe dans une classe, l'IDE nous aidera à utiliser l'écriture<.> espace de noms . De cette façon, lorsque nous écrivons le chargement automatique, nous n'avons pas besoin de considérer dans quel répertoire de fichiers se trouve la classe à charger. Il suffit d'écrire comme ceci :

<span style='font-family: "courier new", courier; font-size: 14px'>spl_autoload_register(function ($class) {</span><br><span style='font-family: "courier new", courier; font-size: 14px'>    require $class . '.php';</span><br><span style='font-family: "courier new", courier; font-size: 14px'>});</span><br><br><span style='font-family: "Microsoft YaHei"; font-size: 14px'>因为我们在index.php中use了所用到的类的命名空间,自动加载函数会到相应的命名空间中去寻找类(上述代码中的$class就相当于是'controller\Controller'),而这些类中又需要实例化其他的类,因为这些类中也声明了use <em>其他类的命名空间 </em>;,所以自动加载函数又会去相应的命名空间中去require其他类。</span><br><br><span style='font-size: 16px; font-family: "Microsoft YaHei"'>这样,我们就不会为加载类而发愁了,极大地解放了我们的编程负担。</span>

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