Heim  >  Artikel  >  Backend-Entwicklung  >  PHP lädt automatisch Objekte

PHP lädt automatisch Objekte

伊谢尔伦
伊谢尔伦Original
2016-11-23 14:20:141229Durchsuche

Viele Entwickler erstellen beim Schreiben objektorientierter Anwendungen eine PHP-Quelldatei für jede Klassendefinition. Ein großes Ärgernis ist, dass am Anfang jedes Skripts eine lange Liste von Include-Dateien (eine Datei pro Klasse) geschrieben werden muss.

In PHP 5 ist dies nicht mehr notwendig. Sie können eine __autoload()-Funktion definieren, die automatisch aufgerufen wird, wenn versucht wird, eine Klasse zu verwenden, die noch nicht definiert wurde. Durch den Aufruf dieser Funktion hat die Skript-Engine eine letzte Chance, die erforderlichen Klassen zu laden, bevor PHP mit einem Fehler abstürzt.

Tipp

spl_autoload_register() bietet eine flexiblere Möglichkeit, das automatische Laden von Klassen zu implementieren. Daher wird die Verwendung der Funktion __autoload() nicht mehr empfohlen und wird in einer zukünftigen Version möglicherweise nicht mehr unterstützt.

Hinweis:

Vor Version 5.3.0 können von der __autoload-Funktion ausgelöste Ausnahmen nicht vom Catch-Anweisungsblock abgefangen werden und führen zu einem schwerwiegenden Fehler. Ab 5.3.0 können von der Funktion __autoload ausgelöste Ausnahmen vom Anweisungsblock „catch“ abgefangen werden, sie müssen jedoch einer Bedingung folgen. Wenn eine benutzerdefinierte Ausnahme ausgelöst wird, muss eine entsprechende benutzerdefinierte Ausnahmeklasse vorhanden sein. Die Funktion __autoload kann benutzerdefinierte Ausnahmeklassen automatisch rekursiv laden.

Hinweis:

Autoloading ist im interaktiven CLI-Modus von PHP nicht verfügbar.

Beispiel #1 Beispiel für automatisches Laden

In diesem Beispiel wird versucht, MyClass1 und MyClass2 aus den Dateien MyClass1.php bzw. MyClass2.php zu laden:

function __autoload($class_name){
require_once $class_name.'.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();

Hinweis: MyClass1 .php und MyClass2.php müssen sich im selben Verzeichnis wie das aktuelle Skript befinden, um in

Beispiel #2 Ein weiteres Beispiel

Dieses Beispiel versucht, die Schnittstelle ITest zu laden:

function __autoload($name) {
   var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/

Beispiel #3 Automatische Lade-Ausnahmebehandlung in PHP 5.3.0

Dieses Beispiel löst eine Ausnahme aus und demonstriert sie im try/catch-Anweisungsblock.

function __autoload($name) {
   echo "Want to load $name.\n";
   throw new Exception("Unable to load $name.");
}
try {
   $obj = new NonLoadableClass();
} catch (Exception $e) {
   echo $e->getMessage(), "\n";
}

Die obige Routine gibt Folgendes aus:

Möchten Sie NonLoadableClass laden.
NonLoadableClass kann nicht geladen werden.

Beispiel #4 Automatisches Laden in PHP 5.3.0 Ausnahmebehandlung in – kein benutzerdefinierter Ausnahmemechanismus

Dieses Beispiel löst eine Ausnahme für eine benutzerdefinierte Ausnahmebehandlungsfunktion aus, die nicht vorhanden ist.

Die obige Routine gibt Folgendes aus:

Möchte NonLoadableClass laden.
Möchte MissingException laden.

Schwerwiegender Fehler: Klasse 'MissingException' nicht in testMissingException.php gefunden online 4


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP-Konstruktor und DestruktorNächster Artikel:PHP-Konstruktor und Destruktor