2011-01-02 17 views
140

Mam dwie klasy:Tworzenie instancji klasy PHP z ciągiem

klasy ClassOne { } i klasa ClassTwo {}. Otrzymuję ciąg znaków, który może być "Jeden" lub "Dwa". Zamiast długiego instrukcji switch, takie jak:

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

Czy mimo sposób mogę utworzyć instancję za pomocą łańcucha, tj new Class("Class" . $str);

Dzięki

Joel

Odpowiedz

334

Tak, możesz!

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

Inne fajne rzeczy można zrobić w php to:
Variable variables:

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

i zmienne funkcje & metod.

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

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

Dzięki za przykłady! – Joel

+0

Świetna odpowiedź, dzięki Bob –

+7

wtf !!!!!! mind blown –

17

można po prostu użyć następującej składni, aby utworzyć nową klasę (jest to przydatne, jeśli tworzysz factory):

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

Jako (wyjątkowo surowy) przykładowa metoda fabryczna:

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.'); 
} 
Powiązane problemy