Ankündigung

Einklappen
Keine Ankündigung bisher.

Autoload: Klasse wird nicht eingebunden, obwohl der Pfad stimmt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • nuna
    hat ein Thema erstellt Autoload: Klasse wird nicht eingebunden, obwohl der Pfad stimmt.

    Autoload: Klasse wird nicht eingebunden, obwohl der Pfad stimmt

    PHP-Code:
    function __autoload($classname) {

        list(
    $folder$class) = explode('_'$classname);
        
        
    // Ausgabe: C:\xampp\htdocs\lib\registry.php
        // Ausgabe: C:\xampp\htdocs\core\mydb.php
        // Ausgabe: C:\xampp\htdocs\model\terminmodel.php
        
    print_r(ROOT DS strtolower($folder) . DS strtolower($class) . '.php');

        require_once(
    ROOT DS strtolower($folder) . DS strtolower($class) . '.php');
    }

    $cont Lib_Registry::getInstance();
    $cont->db = new Core_MyDB;
    $ont->termin = new Model_TerminModel
    Dieser Autoloader steht im index.php ganz oben. Obwohl die Pfade richtig sind, gibt es mir einen Fatal error.
    Fatal error: Class 'Lib_Registry' not found in C:\xampp\htdocs\index.php on line 15
    Was mache ich falsch?

  • ChrisB
    antwortet
    Wenn deine __autoload-Funktion aufgerufen wird, muss require_once auch eine Datei gefunden haben, denn sonst würde dein Script mit einem fatal error abbrechen.

    Also kann es nur noch entweder die falsche Datei sein (nicht die, in der die Klasse Lib_Registry deklariert ist), oder es ist die Datei, die du zu laden beabsichtigt hattest, aber es steht nicht das richtige drin.

    Einen Kommentar schreiben:


  • nuna
    antwortet
    ich habe mein Projekt direkt in htdocs.

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Zitat von nuna Beitrag anzeigen
    PHP-Code:
        // Ausgabe: C:\xampp\htdocs\lib\registry.php
        // Ausgabe: C:\xampp\htdocs\core\mydb.php
        // Ausgabe: C:\xampp\htdocs\model\terminmodel.php 
    Sach ma fehlt da nicht noch dein Projekt?
    http://localhost/[Projekt]/index.php
    Oder hast die direkt im htdocs drinne?

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Also wenn du Class 'Lib_Registry' ein bilden möchtest, muss:

    1. die Datei im ordner lib/ liegen
    2. die Datei selbst registry.php heißen
    3. In der registry.php muss die Klasse Lib_Registry heißen (class Lib_Registry)

    Ist das alles gegeben?

    Einen Kommentar schreiben:


  • nuna
    antwortet
    Hast Du Dir den Pfad mal ausgeben lassen?
    Ich habe in meinem obigen Code diese Kommentarzeilen, dass die Ausgabe des Pfades korrekt ist.
    PHP-Code:
        // Ausgabe: C:\xampp\htdocs\lib\registry.php
        // Ausgabe: C:\xampp\htdocs\core\mydb.php
        // Ausgabe: C:\xampp\htdocs\model\terminmodel.php
        
    print_r(ROOT DS strtolower($folder) . DS strtolower($class) . '.php'); 
    Die Klasse heißt registry, lib ist der Ordner, in dem es sich befindet. Bezüglich der Groß-Kleinschreibung stimmt auch alles. Auch sind die Dateien korrekt benamt. Obwohl er die Dateien richtig einbindet, kann ich die Klassen nicht instanziieren. Dabei bindet er sogar die geerbten Klassen richtig ein.

    Model_TerminModel = model ist der Ordner in dem sich TerminModel, dass von Core_Model erbt, befindet.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Hast Du Dir den Pfad mal ausgeben lassen? Hast Du class_exists mit dem falschen Parameter aufgerufen? Heißt die Klasse wirklich Lib_Registry?

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    PHP-Code:
    function __autoload($classname) {
        
    $class str_replace('_''/'$classname);
        require_once(
    strtolower($class) . '.php');

    Probier mal das.
    Die Dateien in denen die Klassen liegen, sind alle klein geschrieben?

    Nachtrag:
    http://de2.php.net/manual/en/function.spl-autoload.php das wäre auch mal interessant, damit kann man mehrere Autoloader definieren.

    Einen Kommentar schreiben:

Lädt...
X