2012-06-21 22 views
16
class Manage 
{ 

spl_autoload_register(function($class) { 
    include $class . '.class.php'; 
}); 
} 

Angenommen, ich habe einen Code wie oben. Ich entschied mich für die anonyme Funktion Methode zum Laden von Klassen, aber wie wird das verwendet? Wie genau bestimmt es, welche '$class' zu laden?Wie benutze ich spl_autoload_register?

+0

Ihr Code ist falsch. Lege entweder 'sql_autoload_register' aus der Klasse' Verwalten' oder lege es in eine Methode. – xdazz

+2

@zerkms Was ist es heute mit OPs und ihren üblen Mündern? Und warum greifen sie immer die Mods an? –

+1

Zuerst sollten Sie Ihren Code syntaktisch überprüfen, bevor Sie ihn hier veröffentlichen. – hakre

Antwort

21

Sie können den Code dort nicht setzen. Sie sollten das SPL-Register nach Ihrer Klasse hinzufügen. Wenn Sie eine Funktion innerhalb der Manage Klasse registrieren wollten könnten Sie tun:

class Manage { 
    public static function autoload($class) { 
     include $class . '.class.php'; 
    } 
} 

spl_autoload_register(array('Manage', 'autoload')); 

Doch wie Sie demonstriert können Sie eine anonyme Funktion verwenden. Sie haben nicht einmal eine Klasse benötigen, so können Sie nur tun:

spl_autoload_register(function($class) { 
    include $class . '.class.php'; 
}); 

So oder so, die Funktion, die Sie auf einen Pool von Funktionen angeben, wird hinzugefügt, die für die automatischen Laden verantwortlich sind. Ihre Funktion wird an diese Liste angehängt (wenn also bereits Einträge in der Liste vorhanden waren, wird Ihre zuletzt verwendet). Wenn Sie so etwas tun:

UnloadedClass::someFunc('stuff'); 

PHP wird erkennen, dass UnloadedClass noch nicht deklariert wurde. Es wird dann durch die SPL-Autoload-Funktionsliste durchlaufen. Es ruft jede Funktion mit einem Argument auf: 'UnloadedClass'. Dann, nachdem jede Funktion aufgerufen wurde, prüft sie, ob die Klasse noch existiert. Ist dies nicht der Fall, wird bis zum Ende der Liste fortgefahren. Wenn die Klasse nie geladen wird, erhalten Sie einen schwerwiegenden Fehler, der Ihnen mitteilt, dass die Klasse nicht existiert.

12

Wie genau bestimmt, welche '$ Klasse' zu laden?

Die $class wird von php automatisch übergeben. Und es ist der Name der Klasse noch nicht deklariert, aber irgendwo in der Laufzeit verwendet

+0

nett. Danke, Mann. Das wollte ich wissen. – Viraths