Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 08-05-2008, 23:17
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard Namespaces und Autoloading

Ich experimentiere gerade mit PHP6 und bin an den Namespaces hängen gelieben, jedenfalls im Zusammenhang mit __autoload. Bisher habe ich das Laden (am Beispiel einer Bibliothek) gelöst, in dem ich alle Dateien mit den zugehörigen Pfaden aus dem Bibliotheksverzeichnis ausgelesen und gespeichert habe, da meine Klassenname - anders als Zend Framework und Co. - kein Abbild ihres Dateipfads darstellen.
PHP-Code:
public static function load_library()
{
    
$loaded_library = array();

    foreach (new 
RecursiveIteratorIterator(
             new 
RecursiveDirectoryIterator(dirname(__FILE__))) as $file)                           
    {
        if (
substr(strrchr($file->getFilename(), '.'), 1) == 'php')
        {
            
$filepath $file->getPathname();
                
            require_once 
$filepath;
                
            
$loaded_library[end(get_declared_classes())] = $filepath;
        }
    }

    return 
$loaded_library;

PHP-Code:
public static function __autoload($class_name)
{
    
$library self::load_library();

    if (isset(
$library[$class_name]))
    {
        require_once 
$library[$class_name];
        
        return 
true;
    }

    return 
false;

Namespaces scheinen mir auf den ersten Blick allerdings eine nette Lösung zu bieten, die die ganze Sache simplifiziert. Eine entsprechende Verzeichnisstruktur vorausgesetzt, ließe sich von den Namespaces auf die Dateipfade der Klassen schließen.
Aus Http::Request würde nach einem simplen str_replace und strtolower http/request.php. Allerdings habe ich in dieser Richtung schon von Problematiken gelesen. Hat jemand von euch diesbezüglich schon Erfahrungen gemacht oder handhabt das auf eine ähnliche Weise?

Grüße

Geändert von Griecherus (09-05-2008 um 01:24 Uhr)
Mit Zitat antworten