Пытаюсь создать псевдоним имени при помощи оператора use; причем хотелось бы это использовать в качестве одной из альтернатив elseif; если условие истинно, тогда... ну вот примерно так: PHP: ----------- } elseif ($params == 1) { use My\Full\NSname; -----------etc; } При этом перманентно получаю ошибку: #0 syntax error, unexpected 'use' (T_USE) Но ошибка исчезает, если подключаю PHP: require 'abc.php'; , в котором прописан ровно тот же синтаксис, use My\Full\NSname и так далее. Подскажите пожалуйста, почему в первом случае не работает, а во втором без проблем проходит? есть ли способ включить use в конструкцию elseif ? Что я не так делаю?
а мож у тебя чото не включено? или чото не обьявлено? или на крайняк дето не дописал точки с запятой?
и еще. вот создаешь ты 3. use My\Full\NSname .... а дальше то что? оно ж по идее во что то должно создаваться? хотя мож чо не так я вообще воспринимаю --- Добавлено --- порылся на пхп нет, смотри вот наверно почему трабл use My \ Full\NSname ; // импортирование глобального класса. а у тебя он не создан наверно. а внутри файла который ты подключаешь он вероятно создан и импортируется. и если тебе нужно именно создать а не импортировать зырь тут https://php.ru/manual/language.namespaces.importing.html --- Добавлено --- а не... я сам там коряво прочел... там импорт равноценен созданию --- Добавлено --- а вот и ответ походу Ключевое слово use должно быть указано в самом начале файла (в глобальной области) или внутри объявления пространства имен. Это необходимо потому, что импорт выполняется во время компиляции, а не во время исполнения, поэтому оно не может быть заключено в блок. Следующий пример показывает недопустимое применение ключевого слова use : --- Добавлено --- и тогда возвращаемся к тому файлу. там оно вероятно вначале обьявлено а потом импортируется, а ты его не импортируешь а создаешь там где оно не может быть создано --- Добавлено --- по крайней мере так гласит пхп.нет
эммм а в мануале ж этого as нету ... use My \ Full\NSname ; // импортирование глобального класса --- Добавлено --- да даже если и про аs забыть. мануал говорит же что расположение use должно ж быть другое... или я чото не так понял?
ну тогда это не псевдоним а тупо импорт --- Добавлено --- не знаю. всегда пишу их вверху или указываю полный путь в коде
ничего странного. импорт происходит на этапе сборки, ветка условия выбирается на этапе выполнения. --- Добавлено --- обойти можно через переменное имя класса
Спасибо всем за разъяснения, я видел эту ремарку на php.net. Хотелось убедиться, что проблема именно в этом... не могли бы поподробнее, как обойти проблему, чтобы обойтись одним php-файлом, а не двумя? Коротко суть задачи: я пробую написать модуль для CMS, там свой MVC, ну вот я и думал, что проблема, возможно, где-то в требованиях этого самого MVC.... а оказалось, что тупо в использовании use не в начале файла. Use необходимо в данном случае для того, чтобы, в зависимости от отмеченного пользователем чекбокса, начать поиск по второй db, а если чекбокс не отмечен, нет смысла и использовать use (db в этом случае может быть попросту не подключен). Отсюда и elseif - если из параметров панели администратора получаем 1 (чекбокс отмечен), тогда, стало быть, use, eсли нет - и т.д. Любые идеи?
@superlamer посмотри авто загрузку классов, есть готовый PSR как пример, можно и composer ещё глянуть