EDIT с моим собственным комментарием после
Я думаю, проблема в том, что когда PHP разбирает файл для "компиляции", сначала он переводит имена классов в их полностью квалифицированные имя. Таким образом, индекс будет переведен в Controller\Home\Index. После что, когда PHP переводит переменные в их значение. Поэтому, если я использую переменная как имя класса, она не будет определять свое имя, потому что это шаг уже произошел. И вот почему не находит класс. Это просто предположение, но, скорее всего, именно так Blockquote
Редактировать конец
Im, использующий 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;" в начале моего script я могу использовать только "новый Index();" без проблем. Но если вместо "Индекса" я использую строчную переменную типа $var = "Index", она НЕ работает. Я не понимаю, почему. Мне нужно, чтобы этот script был динамическим, поэтому для этого мне нужна переменная.
Спасибо!
<суб > дополнительные поиски длинного хвоста:
- php полное имя из переменной
- PHP-экземпляр класса из псевдонима в переменной
суб >