/** * 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); }