Возможно ли, чтобы PHP создавал объект из имени класса, если имя класса хранится в строке?
Да, конечно.
$className = 'MyClass'; $object = new $className;
Да это :
<?php $type = 'cc'; $obj = new $type; // outputs "hi!" class cc { function __construct() { echo 'hi!'; } } ?>
Вы можете выполнить динамический вызов, сохранив свои имена (имена) / методы в хранилище, такие как база данных. Предполагая, что класс устойчив к ошибкам.
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
и т. д. Затем в вашем коде используются строки, возвращаемые базой данных для имен классов и методов. вы даже можете хранить sql-запросы для своих классов, уровень автоматизации, если до вашего воображения.
$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}(); } }
Я использую этот метод для создания веб-служб REST.
Статично:
$class = 'foo'; return $class::getId();