php - example - spl_autoload_register namespace
Crear una instancia de clase por cadena utilizando espacios de nombres de PHP 5.3 (2)
No puedo evitar un problema al crear una nueva clase utilizando una variable de cadena y PHP 5.3. espacios de nombres Por ejemplo, esto funciona;
$class = ''Reflection'';
$object = new $class();
Sin embargo, esto no;
$class = ''/Application/Log/MyClass'';
$object = new $class();
Se produce un error fatal que indica que no se puede encontrar la clase. Sin embargo, obviamente se puede crear una instancia si se usa FQN, es decir;
$object = new /Application/Log/MyClass;
He encontrado que esto es aparrent en PHP 5.3.2-1 pero no en versiones posteriores. ¿Hay una solución para esto?
Otra forma de lograr el mismo resultado pero con argumentos dinámicos es la siguiente. Considere la clase a continuación como la clase que desea instanciar.
<?php
// test.php
namespace Acme/Bundle/MyBundle;
class Test {
public function __construct($arg1, $arg2) {
var_dump(
$arg1,
$arg2
);
}
}
Y entonces:
<?php
require_once(''test.php'');
(new ReflectionClass(''Acme/Bundle/MyBundle/Test''))->newInstanceArgs([''one'', ''two'']);
Si no está utilizando una versión reciente de PHP, utilice el siguiente código que reemplaza la última línea del ejemplo anterior:
$r = new ReflectionClass(''Acme/Bundle/MyBundle/Test'');
$r->newInstanceArgs(array(''one'', ''two''));
El código producirá el siguiente resultado:
string(3) "one"
string(3) "two"
$class = ''Application/Log/MyClass'';
$object = new $class();
El inicio /
introduce un identificador de espacio de nombres (totalmente calificado), pero no es parte del nombre de la clase en sí.