Chargement générique des classes (__autoload) - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Chargement générique des classes (__autoload) (/showthread.php?tid=1183) Pages :
1
2
|
Chargement générique des classes (__autoload) - Myrina - 12-10-2010 Voici ma première contribution Je développe en PHP 5.2.6 en POO; actuellement je n'ai que 117 classes mais c'est déjà beaucoup et cela nécessite de l'organisation et surtout de la réorganisation (refactoring). Je m'étais fait une version simple de la fonction __autoload qui déterminait l'arborescence dans laquelle se trouvait le fichier à inclure selon le nommage de la classe. Mais très vite, j'ai trouvé des limites à ce système car je n'aime pas avoir trop de classes dans un répertoire. J'ai donc commencé à voir pour un système d'exploration d'un répertoire racine (./inc) afin de localiser le fichier contenant la classe. Mais ce système coûte en ressources et en temps, j'ai alors rajouté une mise en cache simple:
La méthode __class2file() est éventuellement à réécrire pour le lien entre le nom d'une classe et le nom du fichier qui la contient. Le répertoire initial (./inc) est également modifiable au début de la méthode __classFolder(). Pour l'utiliser, il faut effectuer un traitement au début du script PHP:
et un autre à la fin du script PHP:
Après cet appel,pour des fins statistiques, ClassAutoLoader::getNbClasses() contient le nombre de classes chargées pour l'exécution du script; ClassAutoLoader::getDureeChargement() contient la durée de la recherche et du chargement de toutes les classes. EDIT: Il manque le plus important: les restrictions: * un nom de classe doit être unique pour toute l'application * une publication sur un serveur suite à un refactoring doit être précédé par un nettoyage des anciens fichiers; le cache, quant à lui, sait gérer les références mortes. EDIT2: Encapsulation du code dans une classe RE: Chargement générique des classes (__autoload) - srm - 12-10-2010 Une question comme ça, pourquoi tu ne t'inspires pas des Framework qui eux placent leur class dans divers sous répertoire et le nom de la classe y fait référence, exemple : PHPUnit/Test/Case.php Le nom de classe : PHPUnit_Test_Case Il est ensuite très simple de retrouver le fichier. RE: Chargement générique des classes (__autoload) - Myrina - 12-10-2010 (12-10-2010, 06:33 PM)oxman a écrit : Une question comme ça, pourquoi tu ne t'inspires pas des Framework qui eux placent leur class dans divers sous répertoire et le nom de la classe y fait référence, exemple :C'est justement que je ne voulais pas cette adhérence entre le nom de la classe et la localisation de celle-ci RE: Chargement générique des classes (__autoload) - Sephi-Chan - 12-10-2010 C'est le fait d'avoir des noms de classe à rallonge qui te gêne ? RE: Chargement générique des classes (__autoload) - srm - 12-10-2010 Pourtant c'est structuré, bon je te l'accorde c'est un peu de l'économie de bout de chandelle pour pouvoir faire l'équivalent de Scala/Java RE: Chargement générique des classes (__autoload) - Myrina - 12-10-2010 (12-10-2010, 06:50 PM)Sephi-Chan a écrit : C'est le fait d'avoir des noms de classe à rallonge qui te gêne ?oui, plus le besoin de refactorer les classes dans des sous-répertoires plus spécifiques quand la volumétrie devient trop importante à mes yeux. RE: Chargement générique des classes (__autoload) - niahoo - 12-10-2010 hmm perso la "volumétrie" ne me gêne pas, tant que les fichiers restent clairs avec pas trop de lignes. RE: Chargement générique des classes (__autoload) - Anthor - 13-10-2010 Une petite question comme cela, pourquoi ne pas avoir fait une classe, pour gérer le loading des classes ? RE: Chargement générique des classes (__autoload) - Myrina - 13-10-2010 (13-10-2010, 10:22 AM)Anthor a écrit : Une petite question comme cela, pourquoi ne pas avoir fait une classe, pour gérer le loading des classes ?Je ne l'ai pas encore fait mais c'est largement envisageable grâce à spl_autoload_register(). De plus, cela me "résoudrait" la problématique d'utilisation de variables globales. Maintenant, faire une classe non destiner à être instancié et pour ne regrouper que des fonctions statiques...(quoique, en Java, je n'ai pas le choix) RE: Chargement générique des classes (__autoload) - Anthor - 13-10-2010 (13-10-2010, 10:33 AM)Myrina a écrit : De plus, cela me "résoudrait" la problématique d'utilisation de variables globales. Comme tu le dis, c'est un regroupement de fonctions, avec des variables à réutiliser ^^ |