Intereting Posts
PHP-перенаправление после успеха формы Как добавить текстовое поле в регистр формы (laravel generator infyom)? Получение переменной в цикле извне, а функция – Есть ли способ проанализировать вывод print_r Загрузка файла с помощью AngularJS с скриптом php-сервера HTTP / 1.1 505 HTTP-версия не поддерживается Как определить, является ли файл текстовым с помощью PHP? Почему моя «Страница » не сосредоточена на моей веб-странице? Как хранить легкое форматирование (Textile, Markdown) в базе данных? PHPUnit RabbitMQ: написать тест для создания функции соединения Codeigniter 3: Как использовать пакеты композиторов? (Twilio SDK) php pthreads не запускается на xampp 7.0.2 Запрос MySQL возвращает нежелательные строки при извлечении строк на основе конкретных комбинаций тегов как получить значение кнопки отправки, которое находится в цикле while, используя метод post Composer не генерирует информацию автозагрузчика (autoload_namespaces.php)

Может ли PHP создать экземпляр объекта из имени класса в виде строки?

Возможно ли, чтобы 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();