2011-01-02 8 views
140

Tengo dos clases:Creación de instancia de clase PHP con una cadena

de clase y de clase ClassOne { }ClassTwo {}. Estoy recibiendo una cadena que puede ser "Uno" o "Dos". En lugar de utilizar una sentencia switch larga, tales como:

switch($str) { 
    case "One": 
     return new ClassOne(); 
    case "Two": 
     return new ClassTwo(); 
} 

¿Hay manera alguna forma de crear una instancia mediante una cadena, es decir new Class("Class" . $str);

Gracias,

Joel

Respuesta

334

Sí, ¡usted puede!

$str = "One"; 
$class = "Class".$str; 
$object = new $class(); 

otras cosas interesantes que puede hacer en PHP son:
Variable variables:

$personCount = 123; 
$varname = 'personCount'; 
echo $$varname; // echo's 123 

y variables funciones & métodos.

$func = 'my_function'; 
$func('param1'); // calls my_function('param1'); 

$method = 'doStuff'; 
$object = new MyClass(); 
$object->$method(); // calls the MyClass->doStuff() method. 
+0

¡Gracias por los ejemplos! – Joel

+0

Excelente respuesta, gracias Bob –

+7

wtf !!!!!! mind blown –

17

Usted puede simplemente utilizar la siguiente sintaxis para crear una nueva clase (esto es útil si va a crear un factory):

$className = $whatever; 
$object = new $className; 

Como (excepcionalmente crudo) método de ejemplo de fábrica:

public function &factory($className) { 

    require_once($className.'php'); 
    if(class_exists($className)) return new $className; 

    die('Cannot create new "'.$className.'" class - includes not found or class unavailable.'); 
} 
Cuestiones relacionadas