PHP Namespace Autoloader

Guten Tag liebe Community,

ich habe folgendes Problem und zwar habe ich mir einen Namepace freundlichen Autoloader gebastelt der auch soweit funktioniert, außer wenn ich ihn in Unterordner einbinde.

Autoloader:
[PHP]class Autoloader {

const BASE = __DIR__;
const FILE_EXTENSION = '.php';
const DS = DIRECTORY_SEPARATOR;

public static function autoload($class) {
    $uri = str_replace("test\\", "", strtolower(str_replace("\\", self::DS, $class))) . self::FILE_EXTENSION;
    if(file_exists($uri)) {
        require_once($uri);
    }
}

}

spl_autoload_register(‚Autoloader::autoload‘);[/PHP]

Verzeichnisstruktur:
[ul]
[li]Projekt[/li][LIST]
[li]administrator[/li][LIST]
[li]index.php[/li][/ul]
[li]library[/li]
[li]index.php[/li][/LIST]
[/LIST]

Im Verzeichnis „library“ liegen meine Klassen. Wenn ich den Autloader nun in die index.php im root Verzeichnis einbinde, funktioniert alles einwandfrei. Binde ich jedoch meinen Autoloader in meine index.php im Verzeichnis administrator ein, kann die Klasse nicht geladen werden. Anbei nochmal der Quellcode beider PHP-Dateien.

root index.php
[PHP]<?php

namespace Test;

use Test\Library\Klasse;

require_once(‚init_autoloader.php‘);

$test = Klasse::testFunktion();

?>
[/PHP]

administrator index.php
[PHP]<?php

namespace Test\Administrator;

use Test\Library\Klasse;

require_once(DIR . ‚/…/init_autoloader.php‘);

$test = Klasse::testFunktion();
?>[/PHP]

Fehler:

Fatal error: Class ‚Test\Library\Klasse‘ not found in D:\Programme\xampp\htdocs\test\administrator\index.php on line 18

Hoffe ihr könnt mir helfen. Bin ratlos oder dumm.

Also ich kann dir da nur Composer empfehlen, der übernimmt die ganze Autoload geschichte ab. Und es ist eigentlich schon zu einem Standard geworden.

Der zweite Beitrag sollte dich in diesem Thread auf tutorials.de helfen.

Danke. Bevor ich mich jedoch an den Composer mache, würde ich gerne trotzdem mein Problem lösen.

Probier mal in der Autoloader noch folgende Zeile hinzuzufügen
[PHP]$uri = self::BASE.‚\‘.$uri;[/PHP]

Danke funktioniert einwandfrei!