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

  • 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?


  • #2
    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.
    "My software never has bugs, it just develops random features."
    "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

    Kommentar


    • #3
      Hast Du Dir den Pfad mal ausgeben lassen? Hast Du class_exists mit dem falschen Parameter aufgerufen? Heißt die Klasse wirklich Lib_Registry?

      Kommentar


      • #4
        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.

        Kommentar


        • #5
          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?
          "My software never has bugs, it just develops random features."
          "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

          Kommentar


          • #6
            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?
            "My software never has bugs, it just develops random features."
            "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

            Kommentar


            • #7
              ich habe mein Projekt direkt in htdocs.

              Kommentar


              • #8
                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.

                Kommentar

                Lädt...
                X