2014-11-04 9 views
1

Я пытаюсь создать объект в зависимости от переменной. Вот мой код:Невозможно создать объект в PHP

$a = 'Test'; 
$o = new $a(); 

Fatal error: Class 'Test' not found in ... 

Что я делаю неправильно? Или в PHP это запрещено?

+4

Загружен ли файл с 'class Test'? У вас установлен автозагрузчик? Вы можете легко создавать классы через динамические строки, подобные этому. Проблема в том, что класс не найден - не то, что код не работает. – h2ooooooo

+0

Да, у меня есть автозагрузчик, если я пишу новый Test(), он работает. – nowiko

+0

Как выглядит ваш автозагрузчик? Это должно работать нормально. Does if if (class_exists ($ a, true)) $ o = new $ a(); 'имеет значение? (это заставит автозагрузчик работать). – h2ooooooo

ответ

5

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

$a = '\namespace\Test'; 
$o = new $a(); 

Для получения более подробной информации, пожалуйста, прочтите documentation.

Как указал h2ooooooo, вы могли бы использовать константы для указания на текущее пространство имен, __NAMESPACE__. Например, $a = '\' . __NAMESPACE . '\';.

+1

'$ a = '\\'. __NAMESPACE__. '\\ Test'; 'также может работать, а затем вам (технически) не нужно будет указывать пространство имен. +1. – h2ooooooo

+0

спасибо, что помогли. и другой связанный с этим вопрос, как я могу назвать метод чем-то вроде этого «действия». $ a.(); или я не могу это сделать? – nowiko

+0

, если мне это нравится, я получаю ошибку. Вызов неопределенного индекса функции() – nowiko

2

Ваш класс Test не определен ...

Попробуйте это:

$a = 'Test'; 
$o = new $a(); 
var_dump($o); 

class Test {} 
+0

Я использую namespacec и получаю этот класс из другого каталога. Если я напишу новый Test(); он отлично работает. – nowiko

+0

Проверьте, загружен ли тестовый класс (используйте \ YourNamespace \ Test), или вы можете загрузить руководство по классу (требуется ... Test.php). Проверьте, есть ли у вас правильные имена (каталог - пространство имен, имя_файла - имя_файла). Попробуйте проверить, почему автозагрузка работает неправильно. –

+0

класс, загруженный автозагрузкой композитора, и я использую пространства имен – nowiko

 Смежные вопросы

  • Нет связанных вопросов^_^