2009-09-04 11 views

Respuesta

97

Sí, definitivamente.

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

Genial, debería haberlo probado antes de preguntarle a jeje. ¡Gracias! – user135295

+1

@user: también correcto. Me pregunto por qué vine directamente a SO en lugar de hacer el mínimo indispensable. lol – Ben

+1

De hecho, no es tan evidente. Sé que en Java es una cosa llamada reflexión, pero esto es muy simple en comparación con eso. –

5

Yes it is:

<?php 

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

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

?> 
-1

estático también:

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

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. - [De la crítica] (/ review/low-quality-posts/16691553) – Blackbam

+0

@Blackbam respuesta complementaria relacionada relevante. Por favor solo comente si es útil. –

+0

Es cierto que funciona básicamente de todos modos un poco de explicación de su respuesta sería agradable. La pregunta era "¿puede PHP instanciar un objeto?", Pero el acceso a una función miembro estática no es un acceso a un objeto. – Blackbam

0

Usted puede hacer algo de invocación dinámica almacenando su nombre de clase (s)/métodos en un almacenamiento tales como una base de datos . Suponiendo que la clase es resistente a errores.

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 .. Luego, en el código utilizando las cadenas devueltas por la base de datos de nombres de clases y métodos. incluso puede almacenar consultas sql para sus clases, el nivel de automatización si está a la altura de su imaginación.

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

Utilizo este método para crear servicios web REST.

Cuestiones relacionadas