Namespaces und spl_autoload Problem

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich versuche mich gerade ein wenig mit Namespaces.
Bisher funktioniert alles. Ich habe jetzt noch dazu die __autoload Funktion von PHP benutzt.

Jetzt wird aber der Namensbereich ebenfalls mit in das require() genommen und es entsteht natürlich ein Fehler. Habe ich da was falsch verstanden oder ist das normal das der Namensbereich mit in den Pfad übernommen wird?

Fehler:
Code:
Warning: require_once(core/applications/Core\Applications\db.class.php)

Hier die erstmal ganz einfache autoload Funktion:

PHP:
    function load_core_applications($class_name) {
        require_once('core/applications/' . $class_name . '.class.php');
    }

    spl_autoload_register("load_core_applications");

Und so erzeuge ich das Objekt:

PHP:
$sql = new Core\Applications\db($cfg['db']['server'], $cfg['db']['user'], $cfg['db']['pwd'], $cfg['db']['name']);

Ist der Namensbereich den man festlegt auch gleichzeitig der Dateipfad?

Wenn ich die Autoloader Funktion weglasse und die Datei normal einbinde dann geht es.
Hat jemand eine Idee?

Gruß und Danke
 
Zuletzt bearbeitet:
Also ich hab jetzt noch nicht so viel mit Namespaces gemacht, aber ich denke schon das wenn du den kompletten Pfad auch beim initialisieren angibst, dieser natürlich auch noch übergeben wird.

Da du in deinem require_once ja schon den Pfad stehen hast, müsstest den ja nicht mehr beim initialisieren angeben. Also ein:
PHP:
$sql = new db(/*params*/);

sollte funktionieren.

Oder du nimmst eben den Pfad aus dem require und verwendest diesen beim initialisieren.
 
Wenn du Namespaces nutzt, bildet dieser zusammen mit dem Klassennamen den "vollständigen" Klassennamen. Dementsprechend gibt es zwei Möglichkeiten: entweder, deine Skripts befinden sich alle in einem Verzeichnis und du entfernst den Namespace oder du bildest mit den Namespaces deine Verzeichnisstruktur ab. Dafür musst du aber die Backslashes in normale Slashes umwandeln.
 
Danke euch allen. Ich werde wohl mit den Namespaces die Verzeichnisstruktur abbilden müssen.
Ich dachte da gibt es einen Weg drann vorbei. Gruß
 
Zurück