¿Es posible en PHP crear una instancia de un objeto a partir del nombre de una clase, si el nombre de la clase está almacenado en una cadena?
¿Es posible en PHP crear una instancia de un objeto a partir del nombre de una clase, si el nombre de la clase está almacenado en una cadena?
Respuestas:
Sí, definitivamente.
$className = 'MyClass';
$object = new $className;
Si lo es :
<?php
$type = 'cc';
$obj = new $type; // outputs "hi!"
class cc {
function __construct() {
echo 'hi!';
}
}
?>
Estático también:
$class = 'foo';
return $class::getId();
Puede realizar una invocación dinámica almacenando su (s) nombre (s) de clase / métodos en un almacenamiento como una base de datos. Suponiendo que la clase sea 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 su código usando las cadenas devueltas por la base de datos para los nombres de clases y métodos. Incluso puede almacenar consultas SQL para sus clases, el nivel de automatización depende 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.