2016-07-29 12 views
-3

Ich habe diesen Code gefunden, der alle Klassen innerhalb eines einzelnen Verzeichnisses automatisch startet, und es funktioniert ziemlich gut. Ich möchte es etwas erweitern können, um Klassen aus verschiedenen Pfaden (Verzeichnissen) zu laden. Hier ist der Code:PHP Autoload-Klassen aus verschiedenen Verzeichnissen

define('PATH', realpath(dirname(__file__)) . '/classes') . '/'; 
    define('DS', DIRECTORY_SEPARATOR); 

    class Autoloader 
    { 
     private static $__loader; 


     private function __construct() 
     { 
      spl_autoload_register(array($this, 'autoLoad')); 
     } 


     public static function init() 
     { 
      if (self::$__loader == null) { 
       self::$__loader = new self(); 
      } 

      return self::$__loader; 
     } 


     public function autoLoad($class) 
     { 
      $exts = array('.class.php'); 

      spl_autoload_extensions("'" . implode(',', $exts) . "'"); 
      set_include_path(get_include_path() . PATH_SEPARATOR . PATH); 

      foreach ($exts as $ext) { 
       if (is_readable($path = BASE . strtolower($class . $ext))) { 
        require_once $path; 
        return true; 
       } 
      } 
      self::recursiveAutoLoad($class, PATH); 
     } 

     private static function recursiveAutoLoad($class, $path) 
     { 
      if (is_dir($path)) { 
       if (($handle = opendir($path)) !== false) { 
        while (($resource = readdir($handle)) !== false) { 
         if (($resource == '..') or ($resource == '.')) { 
          continue; 
         } 

         if (is_dir($dir = $path . DS . $resource)) { 
          continue; 
         } else 
          if (is_readable($file = $path . DS . $resource)) { 
           require_once $file; 
          } 
        } 
        closedir($handle); 
       } 
      } 
     } 
    } 

dann in Runt in meiner Datei index.php wie:

Autoloader::init(); 

Ich bin mit PHP 5.6

+0

Haben Sie eine Frage? Diese Seite ist für Fragen gedacht, nicht ein Ort, um Ihre To-Do-Liste abzulegen und von jemand anderem zu erwarten, dass er Ihre Arbeit für Sie erledigt. –

+0

@Marc B, Ja, meine Frage ist, wie man die Klasse erweitert, um mehrere Verzeichnisse zu scannen. Ich erwarte nicht, dass jemand meine Arbeit macht. Ich habe ein Stück Code zur Verfügung gestellt, und ich brauche Hilfe damit. Wenn du nicht helfen willst, dann verschwende diesen Raum nicht und lass jemand anderen etwas schlaues sagen. – Alko

+0

Wir reparieren Code, wir schreiben ihn nicht für Sie oder helfen Ihnen bei der Entwicklung Ihres Systems. Das ist dein Job. Sie versuchen, etwas zu tun, wir (vielleicht) versuchen, Hilfe zu beheben. –

Antwort

0

Sie können die anderen Verzeichnisse auf den Pfad enthalten hinzufügen und wenn die Klassendateien die gleiche Erweiterung wie Ihre vorhandenen Klassendateien haben, findet Ihr Autoloader sie

vor Aufruf Autoloader:init(), do:

//directories you want the autoloader to search through 
$newDirectories = ['/path/to/a', '/path/to/b']; 
$path = get_include_path().PATH_SEPARATOR; 
$path .= implode(PATH_SEPARATOR, $newDirectories); 
set_include_path($path)