Instanciando uma classe PHP com namespace dinamicamente

É bastante conhecido que você pode instantaneamente uma classe PHP com um nome dinâmico usando uma variável:

$class = 'Foo_Bar';
$object
= new $class();

é o mesmo que

$object = new Foo_Bar();

Fica um pouco mais complicado se sua classe for definida em um namespace e você a instanciar de fora desse namespace. Se você estiver codificando uma classe, precisará usar uma barra invertida inicial para fazer referência à classe.

namespace App;
$object
= new FooBar();

// this would try to instantiate AppFooBar
//$object = new FooBar();

Mas se você estiver usando um nome dinâmico, a string não deve ter a barra invertida inicial, porque a barra invertida não faz parte do nome da classe.

namespace App;
$class
= 'FooBar';
$object
= new $class();

Se você incluir a barra, seu código não será executado no PHP 5.3.2 – você obterá um Class '\Foo\Bar' not founderro. Este post stackoverflow me esclareceu. Conforme mencionado na postagem, o código funcionará em PHP> = 5.3.3 com ou sem a barra.

Esta dica foi republicada do meu blog, jontai.me