Autoladdning av klasser
Autoladda Klasser
Många utvecklare som skriver objektorienterade applikationer skapar en PHP-källfil per klassdefinition. En av de största irritationsmomenten är att behöva skriva en lång lista med nödvändiga inkluderingskommandon i början av varje skript (ett för varje klass).
Funktionen `spl_autoload_register()` registrerar ett obegränsat antal autoladdare, vilket möjliggör att klasser och gränssnitt automatiskt laddas om de för närvarande inte är definierade. Genom att registrera autoladdare ges PHP en sista chans att ladda klassen eller gränssnittet innan det misslyckas med ett fel.
Alla klassliknande konstruktioner kan autoladdas på samma sätt. Detta inkluderar klasser, gränssnitt, traits och uppräkningar.
Varning: Före PHP 8.0.0 var det möjligt att använda `__autoload()` för att autoladda klasser och gränssnitt. Dock är det ett mindre flexibelt alternativ till `spl_autoload_register()` och `__autoload()` är föråldrat från och med PHP 7.2.0 och borttaget från och med PHP 8.0.0.
Observera:
`spl_autoload_register()` kan anropas flera gånger för att registrera flera autoladdare. Att kasta ett undantag från en autoload-funktion kommer dock att avbryta den processen och inte tillåta att ytterligare autoload-funktioner körs. Av den anledningen är det starkt avrått att kasta undantag från en autoload-funktion.
Exempel #1 Autoload-exempel
Detta exempel försöker ladda klasserna `MyClass1` och `MyClass2` från filerna `MyClass1.php` respektive `MyClass2.php`.
<?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); $obj = new MyClass1(); $obj2 = new MyClass2(); ?>
Exempel #2 Autoload annat exempel
Detta exempel försöker ladda gränssnittet `ITest`.
<?php spl_autoload_register(function ($name) { var_dump($name); }); class Foo implements ITest { } /* string(5) "ITest" Fatal error: Interface 'ITest' not found in ... */ ?>
Se även
- `unserialize()`
- `unserialize_callback_func`
- `unserialize_max_depth`
- `spl_autoload_register()`
- `spl_autoload()`
- `__autoload()`
Sidslut
Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.oop5.autoload.php
PHP
Språkreferens
Språkreferens#Klasser_och_Objekt