Tengo dos clases class ClassOne { }
y class ClassTwo {}
. Estoy obteniendo una cadena que puede ser "One"
o "Two"
.
En lugar de usar un largo switch
declaración como:
switch ($str) {
case "One":
return new ClassOne();
case "Two":
return new ClassTwo();
}
¿Hay alguna manera de crear una instancia con una cadena, es decir? new Class("Class" . $str);
?
$my_obj = Package\$class_name();
. En cambio, tienes que$class_name = "Package\\" . $class_name; $my_obj = new $class_name();
$className = '\Foo\Bar\MyClass';
$instance = new $className();
$model = $user_model::find()->All();
dónde se$user_model
llama la variable que contiene la cadena de la claseSimplemente puede usar la siguiente sintaxis para crear una nueva clase (esto es útil si está creando una fábrica ):
Como un método de fábrica de ejemplo (excepcionalmente crudo):
fuente
require_once($className.'php');
->require_once($className.'.php');
eche un vistazo al ejemplo 3 de http://www.php.net/manual/en/language.oop5.basic.php
fuente
Digamos que
ClassOne
se define como:Usando PHP Reflection;
Crear una nueva instancia:
Llamar a un método:
Use una variable como método:
El uso de Reflection en lugar de solo usar la cadena sin formato para crear un objeto le brinda un mejor control sobre su objeto y una capacidad de prueba más fácil (PHPUnit depende en gran medida de Reflection)
fuente