Я пытаюсь создать объект в зависимости от переменной. Вот мой код:Невозможно создать объект в PHP
$a = 'Test';
$o = new $a();
Fatal error: Class 'Test' not found in ...
Что я делаю неправильно? Или в PHP это запрещено?
Я пытаюсь создать объект в зависимости от переменной. Вот мой код:Невозможно создать объект в PHP
$a = 'Test';
$o = new $a();
Fatal error: Class 'Test' not found in ...
Что я делаю неправильно? Или в PHP это запрещено?
Если вы используете пространство имен для вашего класса, вы необходимо явно записать его с вашей строки.
$a = '\namespace\Test';
$o = new $a();
Для получения более подробной информации, пожалуйста, прочтите documentation.
Как указал h2ooooooo, вы могли бы использовать константы для указания на текущее пространство имен, __NAMESPACE__
. Например, $a = '\' . __NAMESPACE . '\';
.
'$ a = '\\'. __NAMESPACE__. '\\ Test'; 'также может работать, а затем вам (технически) не нужно будет указывать пространство имен. +1. – h2ooooooo
спасибо, что помогли. и другой связанный с этим вопрос, как я могу назвать метод чем-то вроде этого «действия». $ a.(); или я не могу это сделать? – nowiko
, если мне это нравится, я получаю ошибку. Вызов неопределенного индекса функции() – nowiko
Ваш класс Test не определен ...
Попробуйте это:
$a = 'Test';
$o = new $a();
var_dump($o);
class Test {}
Я использую namespacec и получаю этот класс из другого каталога. Если я напишу новый Test(); он отлично работает. – nowiko
Проверьте, загружен ли тестовый класс (используйте \ YourNamespace \ Test), или вы можете загрузить руководство по классу (требуется ... Test.php). Проверьте, есть ли у вас правильные имена (каталог - пространство имен, имя_файла - имя_файла). Попробуйте проверить, почему автозагрузка работает неправильно. –
класс, загруженный автозагрузкой композитора, и я использую пространства имен – nowiko
Загружен ли файл с 'class Test'? У вас установлен автозагрузчик? Вы можете легко создавать классы через динамические строки, подобные этому. Проблема в том, что класс не найден - не то, что код не работает. – h2ooooooo
Да, у меня есть автозагрузчик, если я пишу новый Test(), он работает. – nowiko
Как выглядит ваш автозагрузчик? Это должно работать нормально. Does if if (class_exists ($ a, true)) $ o = new $ a(); 'имеет значение? (это заставит автозагрузчик работать). – h2ooooooo