Classes Lazy Comprend PHP
-
26-09-2019 - |
Question
J'utilise un chargeur automatique pour inclure les classes. Qu'est-ce que je fais est maintenant en utilisant « glob » pour lire différents de dir et les pousser dans un tableau. Y at-il une meilleure solution?
$path = './';
$files = array_merge(
glob($path.'includes/classes/system/*.class.php'),
glob($path.'includes/classes/system/baseclasses/*.class.php'),
glob($path.'includes/classes/system/systementities/*.class.php'));
EDIT:
J'utilise ceci à l'intérieur d'une classe d'auto-chargement. Le problème est que je dois rechercher les fichiers avec glob. Y at-il un moyen plus rapide de le faire?
La solution
Autochargement sera déclenchée chaque fois que vous essayez d'utiliser une classe qui ne sait pas à PHP. Si vous utilisez include
/ require
, PHP passera par tous les répertoires que vous avez spécifiés pour votre include_path
dans le php.ini, donc il ne devrait aucune raison d'utiliser glob
. Dans votre cas, il devrait être suffisant pour régler le include_path
à
/path/to/includes/classes/system/
plus rapide moyen d'inclure des fichiers serait d'utiliser un class2file map . Cependant, cela vous oblige à créer une telle carte et tenir à jour lorsque vous modifiez votre application.
Autres conseils
PHP a déjà résolu ce problème pour vous. Utilisez PHP de intégré chargeur automatique. Ne jamais rouler votre propre quand la langue / cadre pour vous fournit.
function __autoload($class) {
$classfile = $class.'.class.php';
$path = './includes/classes/system/';
if (is_file($path.$classfile)) require_once($path.$classfile);
if (is_file($path.'baseclasses/'.$classfile)) require_once($path.'baseclasses/'.$classfile);
if (is_file($path.'systementities/'.$classfile)) require_once($path.'systementities/'.$classfile);
}
... qui est toujours pas la meilleure façon, mais il vous permet de vous déplacer en utilisant glob (). Si vous chargez généralement tous vos systementities il devrait y avoir une liste require () codées en dur dans un script de démarrage / config. Il y a beaucoup d'options sur la façon d'organiser et de récupérer des fichiers de classe. Pour réduire la recherche de temps pour les scripts que vous pourriez penser à votre arborescence des fichiers d'interface. Par souci de simplicité, vous pouvez mettre toutes les classes non obligatoires dans le même dossier, ce qui réduit la is_file () appelle à un seul.
Dans mon système, j'ai classes d'objets regroupés dans des dossiers avec leurs scripts de contrôle respectifs et des vues. Ma fonction __autoload () a un travail plus simple -
$classfile = $path.$class.'/'.$class.'_class.php';
if (is_file($classfile)) require_once($classfile);