Возможно ли в PHP создать экземпляр объекта из имени класса, если имя класса хранится в строке?
php
class
object
initialization
user135295
источник
источник
Да это так :
<?php $type = 'cc'; $obj = new $type; // outputs "hi!" class cc { function __construct() { echo 'hi!'; } } ?>
источник
если вашему классу нужны аргументы, вы должны сделать это:
class Foo { public function __construct($bar) { echo $bar; } } $name = 'Foo'; $args = 'bar'; $ref = new ReflectionClass($name); $obj = $ref->newInstanceArgs(array($args));
источник
Статический тоже:
$class = 'foo'; return $class::getId();
источник
Вы можете выполнить некоторый динамический вызов, сохранив свои имена классов / методы в хранилище, таком как база данных. Предполагая, что класс устойчив к ошибкам.
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.
источник