2011-01-02 17 views
140

Ho due classi:Creazione di istanza di una classe PHP con una stringa

classe ClassOne { } e di classe ClassTwo {}. Sto ricevendo una stringa che può essere "Uno" o "Due". Invece di utilizzare un'istruzione switch lungo come ad esempio:

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

C'è comunque modo posso creare un'istanza utilizzando una stringa, cioè new Class("Class" . $str);

Grazie,

Joel

risposta

334

Sì, puoi!

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

altre cose interessanti che si può fare in PHP sono:
Variable variables:

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

e variabili funzioni & metodi.

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

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

Grazie per gli esempi! – Joel

+0

Ottima risposta, grazie Bob –

+7

wtf !!!!!! mente soffiata –

17

Si può semplicemente utilizzare la seguente sintassi per creare una nuova classe (questo è utile se si sta creando un factory):

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

Come metodo di esempio (eccezionalmente grezzo) di fabbrica:

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.'); 
} 
Problemi correlati