Como criar de forma segura e dinâmica uma instância de uma classe PHP existente?

Digamos que eu tenho um arquivo Foo.php:

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

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

?>

Se eu quiser criar uma classe do tipo Foo, eu poderia usar:

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

Mas diga que eu criei umPadrão da Cadeia de Comando e eu tenho um arquivo de configuração que registra todas as classes possíveis e cria uma instância dessas classes com base nas strings presentes no arquivo de configuração.

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...
}

Como garantir que essas classes estejam realmente onde o arquivo de configuração diz que estão? E o que acontece se uma classe não estiver lá (mas o arquivo estiver), ele criará uma instância de uma classe gerada dinamicamente, sem descrição adicional?

questionAnswers(2)

yourAnswerToTheQuestion