ИЗМЕНИТЬ с моим собственным комментарием
Я думаю, проблема в том, что когда 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 = «Индекс», она НЕ работает. Я не могу понять почему. Мне нужно, чтобы этот скрипт был динамическим, вот почему мне нужна переменная для этого.
Спасибо!
дополнительные поиски с длинным хвостом: