In navolging van mijn eerdere topic vandaag, ben ik tot de conclusie gekomen dat ik mijn vraag wellicht anders / breder moet stellen.
Stel ik wil een class Foo gebruiken:
$foo = new Foo();
Echter, om een of andere reden kan het bestand wat bij deze class hoort niet geladen worden (bijvoorbeeld omdat het niet bestaat). Kan ik de fout die hieruit volgt dan op de een of andere manier opvangen?
Dankjewel voor het meedenken. Jouw voorbeeld met het gooien van een Exception is inderdaad wat ik nu ongeveer doe, alleen gebruik ik niet class_exists(). Op het moment dat de autoloader wordt aangeroepen, zal de class namelijk nooit bestaan. Dat is namelijk de reden waarom de autoloader werd aangeroepen :D
In plaats van class_exists() gebruik ik file_exists(). Ik kijk of het bestand wat bij de class-naam hoort bestaat. Als het bestand niet bestaat dan gooi ik een exception. Vervolgens zou je dan zoiets kunnen doen:
<?php
try {
$module = new FooModule();
$module->foo();
} catch(AutoloaderException $e) {
// er ontbreekt ergens een class bestand
}
?>
Dit lijkt mij de beste optie.
Probleem is dan dus dat de volgende autoloader niet meer wordt aangeroepen en alles dus alleen vanuit jouw autoloader kan geladen worden. Daarmee ga je jezelf heel erg beperken.
$foo = new \foo\foo();
?>
Stel nu, class-bestand foo bestaat niet. Autoloader 1 zal het bestand niet proberen in te laden, omdat de namespace niet klopt. Deze autoloader zal daarom ook geen exception gooien. Bij autoloader 2 klopt de namespace wel. Het class-bestand behoort dus te bestaan. Als dit niet het geval is gooit deze autoloader wel een exception.