autoload et plusieurs répertoires
Je viens de regarder à php autoload() fonction. Semble une bonne idée, mais je ne suis pas sûr de savoir comment il gère plusieurs répertoires. Mon actuel de développement a essentiellement un répertoire de la bibliothèque de la structure de regroupement de classes dans des sous-répertoires par opération. Je me demandais-je déclarer un include() pour chaque répertoire ... qui j'espère vraiment que je n'ai pas à le faire.
Peut vous conseiller grâce
OriginalL'auteur | 2009-08-31
Vous devez vous connecter pour publier un commentaire.
Vous voudrez peut-être jeter un oeil à la POIRE Convention pour les noms de classe, qui est vraiment génial pour le chargement automatique.
Fondamentalement, il indique que :
Qui signifie trouver le fichier à inclure, pour une classe de nom
HTML_Upload_Error
est juste une question de remplacement de '_' par '/' ; vous donnantHTML/Upload/Error.php
Pour plus d'explications, et un couple d'exemples, vous pouvez prendre un coup d'oeil aux articles :
BTW : la présente convention est utilisé par de nombreux grands Frameworks /librairies 😉
Par exemple, Zend Framework utilise cette convention, et c'est vraiment utile !
+1 pour la grande explication lien qui explique __autoload très bien: blog.straylightrun.net/2009/05/06/autoload-magic
OriginalL'auteur
Ici est une classe que j'ai écrit il y a un moment pour un but similaire. Cette époque, j'étais encore en phase d'apprentissage, donc il y aura peut être des idées stupides en cause; il a travaillé quand même.
L'idée de base est qu'il scanne le répertoire source une fois, et crée un tableau de mappage des classes de leurs fichiers sources. La classe est inscrite comme un autochargeur, et lorsqu'il est invoqué, il inclut le fichier requis. Si pas trouvé, il tente de reconstruire le tableau à la volée.
OriginalL'auteur
Malheureusement, vous n'avez qu'à ajouter explicitement chaque répertoire. Cela peut être fait soit par programmation dans un script qui parcourt récursivement les répertoires, ou vous pouvez spécifier une liste.
Probablement le moyen le plus efficace est de spécifier une liste de répertoires et sous-répertoires à la recherche, et l'ajouter à votre "include_path' l'aide de la fonction ini_set().
OriginalL'auteur
Vous sembler confus 🙂 Ou peut-être que je suis confus par votre question.
Il est complètement à vous d'écrire une fonction qui permet de localiser et de charges de la classe, PHP ne se soucient pas où/comment plusieurs niveaux de profondeur qu'il est.
Et, regarder dans Autoload SPL trop, il a les mêmes fonctionnalités de base, mais vous pouvez écrire plusieurs autoload des fonctions et ensuite de la chaîne d'eux. Peut être utile, si vous souhaitez utiliser certaines bibliothèques externes, qui définissent leurs propres chargeurs automatiques qui pourraient éventuellement en conflit avec les vôtres.
OriginalL'auteur
Je suppose que vous parlez de PHP autoload SPL capacité - lorsque vous écrivez que vous êtes propre fonction, puis l'enregistrer auprès de la SPL.
La façon de faire dépend de la façon dont vous créez votre fonction include(s). Il est possible de déclarer plusieurs inclure des fonctions et ensuite les enregistrer avec PHP: combien est à vous. L'autoload SPL capacité permet simplement de vous créer votre propre fonction et à dire à PHP pour exécuter cette fonction à chaque fois qu'une classe de besoins, y compris.
Un des avantages de la création de plusieurs est la capacité à s'inscrire dans leur ordre d'utilisation, le plus utilisé répertoire pour le moins utilisé en dernier. Aussi, si un répertoire est modifié ou supprimé, alors vous simple de modifier et/ou supprimer les responsables de la fonction.
Vous pouvez écrire une fonction qui va passer à travers vous êtes ensemble de la structure de dossier trop (même si je ne le recommande pas pour la facilité d'administration et le code de découplage). Il n'est pas "techniquement bonne" façon de faire 🙂
OriginalL'auteur
Comme déjà mentionné, la SPL le chargement automatique est fonctionnellement une structure dans laquelle vous devez greffe de la mise en œuvre pratique - traversée de répertoire et les conventions de nommage sont partie de ces considérations.
Prendre un exemple concret sous la forme du Zend Chargeur: à sa base, c'est un singleton qui utilise une convention de corrélation des espaces de noms de répertoires qui sont enregistrés avec PHP include path. Exemple Pratique:
Évidemment de mise en œuvre spécifique préoccupations varient d'un projet à l'autre, mais il peut être le meilleur, à la fois comme un exercice de compréhension et de réutilisation de code, pour essayer votre main à la programmation d'un chargeur automatique peut analyser une classe spécifique de format (par exemple 'directory_classname') dans un répertoire de la carte, puis charger et valider la classe.
OriginalL'auteur