2009-09-04 23 views

risposta

97

Sì, sicuramente.

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

Cool, avrei dovuto provarlo prima di chiederglielo. Grazie! – user135295

+1

@user - anche a destra. Mi chiedo perché sono venuto a SO direttamente invece di fare il minimo indispensabile? lol – Ben

+1

In effetti non è così evidente. So che in Java è una cosa chiamata reflection, ma questo è molto semplice rispetto a quello. –

5

Yes it is:

<?php 

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

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

?> 
-1

statico troppo:

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

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla revisione] (/ recensione/post di bassa qualità/16691553) – Blackbam

+0

@Blackbam risposta complementare relativa pertinente. Si prega di commentare solo se è utile. –

+0

Vero che funziona fondamentalmente comunque un po 'di spiegazione della tua risposta sarebbe bello. La domanda era "può PHP istanziare un oggetto" ma l'accesso a una funzione membro statica non è un accesso a un oggetto. – Blackbam

0

Si può fare qualche invocazione dinamica memorizzando la nomeclasse (s)/metodi in una memoria come un database . Supponendo che la classe sia resiliente per gli errori.

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 

ecc .. Poi nel codice utilizzando le stringhe restituite dal database per classi e metodi nomi. puoi persino memorizzare query SQL per le tue classi, il livello di automazione se sei all'altezza della tua immaginazione.

$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}(); 
} 
} 

Io uso questo metodo per creare servizi Web REST.

Problemi correlati