1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
<?php
class MyAutoload{
protected static $classes = array();
public static $est_actif = false;
public static function register( $directory ){
$directory = realpath($directory);
$chemin = $directory."/._autoload";
if( ! self::$est_actif ){
$classes = self::lire_classes( $directory );
self::add( $classes );
}else{
if( !file_exists($chemin) ){
$classes = self::lire_classes( $directory );
self::ecrire_fichier_cache( $chemin, $classes );
self::add( $classes );
}else{
self::charger_cache( $directory );
}
}
}
public static function add( $classes ){
self::$classes = array_merge(self::$classes,$classes);
}
public static function auto_include( $files ){
foreach( $files as $file )
self::__include($file);
}
public static function __include( $file ){
if( isset(self::$classes[$file]) ){
if( is_array(self::$classes[$file])){
foreach(self::$classes[$file] as $index => $file_path){
require_once($file_path.$file);
}
return true;
}else{
$file_path = self::$classes[$file];
require_once($file_path.$file);
return true;
}
}else{
return false;
}
}
protected static function charger_cache( $directory ){
$chemin = $directory."/._autoload";
$classes = array();
require_once($chemin);
self::add( $classes );
}
protected static function lire_classes( $directory ){
$fichiers_per_dir = FS::scannerRepertoire( $directory );
$fichiers = array();
foreach( $fichiers_per_dir as $dir => $fichiers_in_dir ){
foreach( $fichiers_in_dir as $fichier_in_dir ){
if( isset( $fichiers[$fichier_in_dir] ) == false ){
$fichiers[$fichier_in_dir] = $dir;
}
elseif( is_string($fichiers[$fichier_in_dir]) ){
$fichiers[$fichier_in_dir] = array($fichiers[$fichier_in_dir],$dir);
}
else{
$fichiers[$fichier_in_dir][] = $dir;
}
}
}
return $fichiers;
}
protected static function ecrire_fichier_cache( $chemin, $fichiers ){
$fileContent = "";
$eol = "<br/>";
$tab = " ";
$eol = "\r\n";
$tab = " ";
$fileContent .= '$classes = '."array(".$eol;
foreach( $fichiers as $fichier => $dir ){
if( is_string($dir) ){
$fileContent .= $tab."'".$fichier."' => '".$dir."', ".$eol;
}
else{
$fileContent .= $tab."'".$fichier."' => array(".$eol;
foreach($dir as $index => $repertoire ){
$fileContent .= $tab.$tab."'".$repertoire."',".$eol;
}
$fileContent = substr($fileContent, 0, -strlen(",".$eol) ).$eol;
$fileContent .= $tab.$tab."),".$eol;
}
}
$fileContent = substr($fileContent, 0, -strlen(",".$eol) ).$eol;
$fileContent .= ");";
$fileContent = "<"."?php".$eol.$fileContent.$eol."?".">";
file_put_contents($chemin,$fileContent);
return $fileContent;
}
public static function __autoload( $className ){
self::__include( $className.".php" );
}
}
spl_autoload_register(array("MyAutoload","__autoload"));
?>
<?php
MyAutoload::register(__CLASS_DIR__."librairies/");
MyAutoload::auto_include(array("loader.php","define.events.php"));
?> |
Partager