コード例 #1
0
 /**
  * Reconstruit le fichier COPIX_CLASSPATHS_FILE.
  *
  * Nécessite les droits d'écriture dans COPIX_CLASSPATHS_FILE. Cette opération est réservée aux développeurs de Copix.
  */
 public function build()
 {
     // Vérifie qu'on ait ce qu'il faut
     if (!is_writable(COPIX_CLASSPATHS_FILE)) {
         throw new Exception("Impossible d'écrire dans " . COPIX_CLASSPATHS_FILE);
     }
     // Récupère la liste des fichiers
     $files = CopixFile::findFiles(array_keys($this->basePaths), array($this, '_classFileFilter'), array($this, '_classDirFilter'));
     // Effectue une "évaluation" des fichiers pour y trouver des classes/interfaces potentielles
     $this->preParse($files);
     // Met en place notre autoloader maison
     $autoloader = array($this, 'autoload');
     spl_autoload_register($autoloader);
     // Charge tout
     foreach ($files as $file) {
         include_once $file;
     }
     // Supprime l'autoloader maison
     spl_autoload_unregister($autoloader);
     // Récupère toutes les classes et interfaces
     $classes = array_merge(get_declared_classes(), get_declared_interfaces());
     // Filtre celles de copix
     $classes = array_filter($classes, array($this, '_classNameFilter'));
     // Genère le fichier classpath
     $classPathCode = "<?php\n";
     $classPathCode .= "/** Chemins des classes.\n";
     $classPathCode .= "  * Ce fichier est généré par CopixClassPathBuilder, ne pas le modifier !\n";
     $classPathCode .= "  * NE JAMAIS LE SUPPRIMER NON PLUS !\n";
     $classPathCode .= "  * Dernière génération le " . date("Y-m-d H:i:s") . "\n";
     $classPathCode .= "*/\n";
     $classPathCode .= " return array(\n";
     sort($classes);
     foreach ($classes as $class) {
         $reflection = new ReflectionClass($class);
         $fileName = $reflection->getFileName();
         if (isset($this->fileIncludes[$fileName])) {
             $classPathCode .= sprintf("\t'%s' => %s,\n", strtolower($class), $this->fileIncludes[$fileName]);
         }
     }
     $classPathCode .= ");\n";
     $classPathCode .= "?>";
     // Ecrit le fichier
     CopixFile::write(COPIX_CLASSPATHS_FILE, $classPathCode);
 }