Создание объекта из переменной с использованием пространств имен и автозагрузки в PHP

ИЗМЕНИТЬ с моим собственным комментарием

Я думаю, проблема в том, что когда PHP анализирует файл для «компиляции», сначала он переводит имена классов в их полностью определенные имя. Таким образом, Index будет переведен в Controller \ Home \ Index. После PHP переводит переменные в их значения. Поэтому, если я использую переменную в качестве имени класса, она не будет уточнять свое имя, потому что этот шаг уже произошел. И вот почему не найти класс. Это всего лишь предположение, но, скорее всего, так оно и есть Blockquote

End Edit

Я использую UniversalClassLoader из проекта Symfony2 для автоматической загрузки моих классов, но у меня обнаружил странную ошибку, которую не могу решить.

Автозагрузка работает нормально, но затем я столкнулся с этой проблемой:

$controller      = new Index(); // It works!

$controller_name = "Controller\\Home\\Index";
$controller2     = new $controller_name(); // It works!

$controller_name = "Index";
$controller3     = new $controller_name(); // Fatal error: Class 'Index' not found

Два первых случая работают нормально. В первом, поскольку я использую «use Controller \ Home;» в начале моего скрипта я могу использовать только «new Index ();» без проблем. Но если вместо записи «Индекс» я использую строковую переменную вроде $ var = «Индекс», она НЕ работает. Я не могу понять почему. Мне нужно, чтобы этот скрипт был динамическим, вот почему мне нужна переменная для этого.

Спасибо!


дополнительные поиски с длинным хвостом:

  • полное имя php из переменной
  • создание экземпляра класса php из псевдонима в переменной

17
задан Sebastian Mach 25 June 2015 в 14:51
поделиться