динамические имена классов в php

У меня есть базовый класс, называемый field и классами, которые расширяют этот класс, такие как text , select , radio , checkbox , date , time , number и т. Д.

Классы, расширяющие класс field , динамически вызываются в каталоге, рекурсивным использованием include_once() . Я делаю это так, чтобы я (и другие) мог легко добавить новый тип поля только путем добавления одного файла

Что я хочу знать: есть ли способ обосновать новый объект из одного из этих динамически включенных расширяющих классов из имени переменной?

например, класс с именем:

 $field_type = 'checkbox'; $field = new {$field_type}(); 

Может, это сработает? но это не так?

 $field_type = 'checkbox'; $field = new $$field_type(); 

Related of "динамические имена классов в php"

Это должно работать для создания экземпляра класса со значением переменной строки:

 $type = 'Checkbox'; $field = new $type(); echo get_class($field); // Output: Checkbox 

Значит, ваш код должен работать. Каков ваш вопрос снова?

Если вы хотите создать класс, который включает все расширенные классы, это невозможно. Это не то, как классы работают на PHP.

Если вы используете пространство имен, вам нужно будет добавить его, даже если вы находитесь в пространстве имен.

 namespace Foo; $my_var = '\Foo\Bar'; new $my_var; 

В противном случае он не сможет получить класс.

просто

 $type = 'checkbox'; $filed = new $type(); 

необходимо. вам не нужно добавлять скобки

Этого должно быть достаточно:

 $field_type = 'checkbox'; $field = new $field_type(); 

Код, который я тестировал в PHP 5.3

 $c = 'stdClass'; $a = new $c(); var_dump($a); >> object(stdClass)#1 (0) { } 
 $field_type = 'checkbox'; $field = new $field_type; 

Если вам нужны аргументы:

 $field_type = 'checkbox'; $field = new $field_type(5,7,$user); 

Вы также можете использовать отражение, $class = new ReflectionClass($class_name); $instance = $class->newInstance(arg1, arg2, ...); $class = new ReflectionClass($class_name); $instance = $class->newInstance(arg1, arg2, ...);