Est-il possible dans PHP d'instancier un objet à partir du nom d'une classe, si le nom de la classe est stocké dans une chaîne?
Oui, certainement.
$className = 'MyClass';
$object = new $className;
<?php
$type = 'cc';
$obj = new $type; // outputs "hi!"
class cc {
function __construct() {
echo 'hi!';
}
}
?>
Statique aussi:
$class = 'foo';
return $class::getId();
Vous pouvez effectuer un appel dynamique en stockant votre nom de classe (s)/méthodes dans un stockage tel qu'une base de données . En supposant que la classe est résistante aux erreurs.
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 .. Ensuite, dans votre code, utilisez les chaînes renvoyées par la base de données pour les noms de classes et de méthodes. vous pouvez même stocker des requêtes SQL pour vos classes, le niveau d'automatisation étant à la hauteur de votre imagination.
$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}();
}
}
J'utilise cette méthode pour créer des services Web REST.