Может ли PHP создать экземпляр объекта из имени класса в виде строки?
Возможно ли в PHP создать экземпляр объекта из имени класса, если имя класса хранится в строке?
61
4 answers
Да, определенно.
$className = 'MyClass';
$object = new $className;
105
Author: brianreavis, 2009-09-04 03:29:17
<?php
$type = 'cc';
$obj = new $type; // outputs "hi!"
class cc {
function __construct() {
echo 'hi!';
}
}
?>
5
Author: Mr. Smith, 2009-09-04 03:32:32
Тоже статичный:
$class = 'foo';
return $class::getId();
1
Author: Andrew Atkinson, 2017-07-12 15:22:02
Вы можете выполнить некоторый динамический вызов, сохранив свои имена классов/методы в хранилище, таком как база данных. Предполагая, что класс устойчив к ошибкам.
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.
0
Author: Hugo R, 2017-08-25 06:49:28