2012-05-29 13 views
7

Estoy intentando crear una instancia de un objeto de un nombre de clase creado dinámicamente. Estoy usando espacios de nombres y la clase que quiero crear instancias está en el mismo espacio de nombres.Instanciando clase por cadena en el espacio de nombre actual

Para examplify, esto funciona bien:

namespace MyNamespace; 

new MyClass; // MyNamespace\MyClass instantiated 

Considerando que el presente no:

namespace MyNamespace; 

$class = 'MyClass'; 
new $class; // Class 'MyClass' not found 

Es esto un error o estoy haciendo algo mal?

Respuesta

13

Cuando utiliza una cadena con new, debe proporcionar un nombre de clase totalmente calificado.

Usted puede hacer esto con __NAMESPACE__:

$fullclass = __NAMESPACE__ . '\\' . $class; 
new $fullclass; 

Consulte la documentación de la new operator y la constante mágica __NAMESPACE__.

+0

Hola, parece válido. ¿Podría vincular a su fuente de referencia? Gracias :-) – jgivoni

+0

@jgivoni Agregado a mi respuesta. – lonesomeday

+0

Bien, gracias por los enlaces. Pero ahora me pregunto, cuando dices "nombre de clase completamente calificado", ¿no debería comenzar con '\' también? Tal vez el líder '\' puede estar implicado en casos como este? – jgivoni

Cuestiones relacionadas