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_modelllama 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
ClassOnese 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