Wie kann eine Instanz einer vorhandenen PHP-Klasse sicher und dynamisch erstellt werden?

Sag ich habe eine Datei Foo.php:

<?php
interface ICommand
{
     function doSomething();
}

class Foo implements ICommand
{
    public function doSomething()
    {
        return "I'm Foo output";
    }
}

?>

Wenn ich eine Klasse vom Typ Foo erstellen möchte, könnte ich Folgendes verwenden:

require_once("path/to/Foo.php") ;
$bar = new Foo(); 

Aber sag, dass ich ein @ erstellt haChain of Command Pattern und ich haben eine Konfigurationsdatei, die alle möglichen Klassen registriert und eine Instanz dieser Klassen basierend auf Zeichenfolgen erstellt, die in der Konfigurationsdatei vorhanden sind.

register("Foo", "path/to/Foo.php");

function register($className, $classPath)
{
    require_once($classPath); //Error if the file isn't included, but lets 
                              //assume that the file "Foo.php" exists.
    $classInstance = new $className; //What happens here if the class Foo isn't 
                                     //defined in the file "Foo.php"? 

    $classInstance->doSomething(); //And what happens here if this code is executed at
                                   //all?
    //Etc...
}

Wie stelle ich sicher, dass diese Klassen tatsächlich dort sind, wo die Konfigurationsdatei sie angibt? Und was passiert, wenn eine Klasse nicht vorhanden ist (die Datei jedoch), wird dann eine Instanz einer dynamisch generierten Klasse erstellt, die keine weitere Beschreibung hat?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage