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