[PHP] Autoload Problem

Dieses Thema im Forum "Webentwicklung" wurde erstellt von pleq, 24. Juli 2010 .

  1. 24. Juli 2010
    Autoload Problem

    Hi Leute,

    bin gerade an einem kleinen Projekt von mir und stehe vor einem sehr komischen Problem:

    Habe in der Index folgenden code stehen:

    PHP:
    function  __autoload ( $name ) {
        
    var_dump ( $name );
    }
    wenn ich nun eine neue Instanz aufrufen will, kommt folgender Fehler: Fatal error: Class '*' not found

    Trotzdem müsste ich doch eigentlich eine Ausgabe bekommen, weil die Autoload funktion ja aufgerufen werden müsste ... ( $test = new Test; steht natürlich auch im code! )

    Woran kann es liegen, dass die Autoload funktion gar nicht aufgerufen wird?!

    Danke im voraus!
     
  2. 28. Juli 2010
    AW: Autoload Problem

    kannst du mal ein bisschen mehr code posten?

    und erstellst du wirklich nur durch: $test = new Test; ein objekt?
    sollte schon $test = new Test(); und dann möglichst noch was übergeben.

    und hast du überhaupt eine klasse deklariert?
     
  3. 28. Juli 2010
    AW: Autoload Problem

    nein autoload ist eine magische funktion. du musst dir das so vorstellen: wenn php eine klasse nicht findet wird __autoload aufgerufen und wenn die klasse danach nicht vorhanden ist kommt der standard error.

    es ist im grunde " gal" was in der funktion gemacht wird, hauptsache die klasse existiert danach, wenn nicht kehrt php zu seinem standardverhalten zurück und gibt dir die fehlermeldung aus. nur wenn die klasse existiert würde dein var_dump aus der funktion auch ausgegeben, weil php davor ja nicht abbricht ^^

    ist ein wenig verwirrend, aber im grunde ganz einfach: lad die klasse in der funktion und mach sonst nix

    im übrigen, falls du das wissen wolltest, wird der komplette name der klasse übergeben (also auch namespace).

    //vielleicht gut zu wissen:

    php sucht den quelltext immer erst nach klassen und funktionen ab bevor der rest ausgeführt wird. daher sind dem interpreter zur laufzeit schon alle funktionen und klassen bekannt (außer die befinden sich innerhalb einer funktion oder einer if-abfrage) - und genau deswegen legt php so ein "komisches" verhalten an den tag, weil im grunde sofort der entsprechende fehler geworfen wird wenn die klasse/funktion nicht in der class/function-table vorhanden ist. mit __autoload hat man die möglichkeit dieses verhalten auszunutzen und die klasse zur laufzeit "wenn sie gebraucht wird" zu laden.
     
  4. 28. Juli 2010
    AW: Autoload Problem

    nja kenn das __bla() allgemein nur als konstruktor einer klasse...

    also leg ein objekt davon an und wird dann entweder standard konstruktor (leer) oder der modifizierte (hier __autoload()) aufgerufen.

    also sowas:

    PHP:
    class  wurst {
        function 
    __wurst ( $wuerstchen ){
            
    print_r ( $wuerstchen );
        }
       ...
       
    braten  = new  wurst ( "Thüringer Rostbratwurst" );
    }
    und wenn das objekt angelegt werden sollte, wird dann automatisch der konstruktor aufgerufen und dann mit var_dump ausgabe produziert.

    EDIT: ah ok und wieder was gelernt^^. dank dir murdoc - also müsste er in der __autoload() funktion halt eine fehlerbehandlung impementieren, was passiert, wenn die klasse $name nicht vorhanden ist. ansonsten kommt halt die standard-fehlermeldung.
     
  5. 3. August 2010
    AW: Autoload Problem

    ja, der einzig richtige weg um fehler auszugeben wäre folgender:
    PHP:
    function  __autoload ( $class ) {
        
    //class suchen ...
        
        //nicht gefunden?
        
    eval( 'class '   $class  ' { function __construct() { exit("klasse '  $class  ' nicht gefunden"); } } ' );
    }
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.