Comme la plupart des développeurs web ces jours-ci, je profite à fond les avantages de l'architecture MVC solide pour les applications Web et des sites. En faisant MVC avec PHP, le chargement automatique est évidemment extrêmement pratique. Je suis devenu un fan de spl_autoload_register
en définissant simplement une seule fonction __autoload()
, car cela est évidemment plus flexible si vous incorporez différents modules de base qui utilisent chacun leur propre chargement automatique. Cependant, je n'ai jamais senti grand au sujet des fonctions de chargement que j'écris. Ils impliquent beaucoup de vérification de chaîne et d'analyse de répertoire afin de rechercher les classes à charger.stratégies auto-chargement et nommage PHP efficace
Par exemple, disons que j'ai une application qui a un chemin de base défini comme PATH_APP
, et une structure simple avec des répertoires nommés models
, views
et controllers
. J'emploie souvent une structure de nommage dans lequel les fichiers sont nommés IndexView.php
et IndexController.php
dans le répertoire approprié, et les modèles ont généralement pas de régime particulier par défaut. Je pourrais avoir une fonction de chargeur pour cette structure comme celle qui obtient inscrit spl_autoload_register
:
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
Si elle ne trouve après cela, je pourrais avoir une autre fonction pour scanner les sous-répertoires dans le répertoire des modèles. Cependant, tous les tests if/else-ing, string check et directory me semblent inefficaces, et j'aimerais les améliorer.
Je suis très curieux de ce que les noms des fichiers et des stratégies de autoloading autres développeurs pourraient utiliser. Je recherche spécifiquement de bonnes techniques à utiliser pour un chargement automatique efficace, et non des alternatives à l'auto-chargement.
pimp +1 pour la fraîcheur – Louis
J'aime beaucoup l'approche de soulignement. Cela rend la traduction de classe en fichier beaucoup plus efficace. – zombat
Enveloppez 'array_unique()' autour de votre tableau '$ files'. S'il n'y a pas de caractère de soulignement dans le nom de classe, vous essayez chaque fichier deux fois. – mpen