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?

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top