2009-09-04 14 views

Odpowiedz

97

Tak, zdecydowanie.

$className = 'MyClass'; 
$object = new $className; 
+5

Fajnie, powinienem był przetestować to przed pytaniem hehe. Dzięki! – user135295

+1

@user - zbyt prawo. Zastanawiam się, dlaczego trafiłem do SO bezpośrednio, zamiast robić absolutne minimum? lol – Ben

+1

W rzeczywistości nie jest tak oczywiste. Wiem, że w Javie jest to coś, co nazywa się odbiciem, ale w porównaniu z tym jest to bardzo proste. –

5

Yes it is:

<?php 

$type = 'cc'; 
$obj = new $type; // outputs "hi!" 

class cc { 
    function __construct() { 
     echo 'hi!'; 
    } 
} 

?> 
-1

Static też:

$class = 'foo'; 
return $class::getId(); 
+0

Nie zapewnia to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. - [Z recenzji] (/ opinia/niskiej jakości-posts/16691553) – Blackbam

+0

@Blackbam powiązana odpowiednia odpowiedź uzupełniająca. Prosimy tylko o komentarz, jeśli jest przydatny. –

+0

Prawda jest taka, że ​​właściwie tak czy inaczej, wyjaśnienie twojej odpowiedzi byłoby miłe. Pytanie brzmiało "czy PHP może utworzyć instancję obiektu", ale dostęp do statycznej funkcji członka nie jest dostępem do obiektu. – Blackbam

0

Można zrobić jakąś dynamiczną wywołania przez przechowywania classname (y)/metod w pamięci takich jak baza danych . Zakładając, że klasa jest odporna na błędy.

sample table my_table 
    classNameCol | methodNameCol | dynamic_sql 
    class1 | method1 | 'select * tablex where .... ' 
    class1 | method2 | 'select * complex_query where .... ' 
    class2 | method1 | empty use default implementation 

etc .. Następnie w kodzie przy użyciu strun zwróconej przez bazę danych dla klas i metod nazwisk. możesz nawet przechowywać kwerendy sql dla swoich klas, poziom automatyzacji, jeśli do wyobraźni.

$myRecordSet = $wpdb->get_results('select * from my my_table') 

if ($myRecordSet) { 
foreach ($myRecordSet as $currentRecord) { 
    $obj = new $currentRecord->classNameCol; 
    $obj->sql_txt = $currentRecord->dynamic_sql; 
    $obj->{currentRecord->methodNameCol}(); 
} 
} 

Używam tej metody do tworzenia usług internetowych REST.

Powiązane problemy