Hi.
try
{
$instance = new class_xyz();
}
catch (Exception $e)
{
echo "Klasse wurde noch nicht implementiert.";
}
>
> Warum wird das nicht abgefangen, wenn die Klasse nicht verfügbar ist?
Weil keine Exception geworfen wird, die abgefangen werden könnte.
> Ich nutze außerdem \_\_autoload. Dieses prüft das Vorhandensein des Klassenfiles und included es dann.
Oder sie prüft das Vorhandensein des Klassenfiles und gibt brav und stillschweigend false zurück, ohne einen Piep zu sagen, wenn die Datei nicht verfügbar ist.
> ~~~php
function __autoload( $class_name )
> {
> if (file_exists('controllers/classes/' . $class_name . '.class.php'))
> {
> require_once 'controllers/classes/' . $class_name . '.class.php';
> return true;
> }
> return false;
> }
1.: Achtung tocttou - es ist selten ratsam, ein File zu einem anderen Zeitpunkt als dem seines Benutzens auf Existenz zu prüfen und sich dann darauf zu verlassen.
2.: Du wirfst keine Exception, wenn das File fehlt. Und das ist höchstwahrscheinlich auch richtig so. Exceptions sind Ereignisse, die im Programmablauf vorgesehen sind und kontrolliert innerhalb der Programmlogik behandelt werden. Wenn ein File fehlt, dann ist dies wahrscheinlich nicht der Fall, sondern Du willst einen Fehler erzeugen. Falls Du wirklich eine Exception willst, dann sei die Frage gestattet, was das Programm in dem Fall tun soll, wenn die Klasse nicht gefunden wird (außer dieses dem Benutzer mitzuteilen).
Einen Fehler hingegen würde die Funktion require_once automatisch für Dich erzeugen, wenn Du sie denn einfach ließest.
Viele Grüße,
der Bademeister