За последние 24 часа нас посетили 54694 программиста и 1720 роботов. Сейчас ищут 1850 программистов ...

Использование use в конструкции elseif

Тема в разделе "PHP для новичков", создана пользователем superlamer, 2 фев 2017.

  1. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    Пытаюсь создать псевдоним имени при помощи оператора use; причем хотелось бы это использовать в качестве одной из альтернатив elseif; если условие истинно, тогда... ну вот примерно так:

    PHP:
    1. -----------
    2. } elseif ($params == 1) {
    3. use My\Full\NSname;
    4. -----------etc;
    5. }

    При этом перманентно получаю ошибку:

    #0 syntax error, unexpected 'use' (T_USE)

    Но ошибка исчезает, если подключаю

    PHP:
    1. require 'abc.php';

    , в котором прописан ровно тот же синтаксис, use My\Full\NSname и так далее. Подскажите пожалуйста, почему в первом случае не работает, а во втором без проблем проходит? есть ли способ включить use в конструкцию elseif ? Что я не так делаю?
     
  2. Savitar

    Savitar Новичок

    С нами с:
    22 дек 2016
    Сообщения:
    26
    Симпатии:
    1
    а мож у тебя чото не включено? или чото не обьявлено? или на крайняк дето не дописал точки с запятой?
     
  3. Savitar

    Savitar Новичок

    С нами с:
    22 дек 2016
    Сообщения:
    26
    Симпатии:
    1
    и еще. вот создаешь ты 3. use My\Full\NSname .... а дальше то что? оно ж по идее во что то должно создаваться? хотя мож чо не так я вообще воспринимаю
    --- Добавлено ---
    порылся на пхп нет, смотри вот наверно почему трабл
    use My \ Full\NSname ;
    // импортирование глобального класса.
    а у тебя он не создан наверно. а внутри файла который ты подключаешь он вероятно создан и импортируется. и если тебе нужно именно создать а не импортировать зырь тут https://php.ru/manual/language.namespaces.importing.html
    --- Добавлено ---
    а не... я сам там коряво прочел... там импорт равноценен созданию
    --- Добавлено ---
    а вот и ответ походу
    Ключевое слово use должно быть указано в самом начале файла (в глобальной области) или внутри объявления пространства имен. Это необходимо потому, что импорт выполняется во время компиляции, а не во время исполнения, поэтому оно не может быть заключено в блок. Следующий пример показывает недопустимое применение ключевого слова use :
    --- Добавлено ---
    и тогда возвращаемся к тому файлу. там оно вероятно вначале обьявлено а потом импортируется, а ты его не импортируешь а создаешь там где оно не может быть создано
    --- Добавлено ---
    по крайней
    мере так гласит пхп.нет
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    as забыл

    задачу ты какую пытаешься решить таким шаманством?
     
  5. Savitar

    Savitar Новичок

    С нами с:
    22 дек 2016
    Сообщения:
    26
    Симпатии:
    1
    эммм а в мануале ж этого as нету ... use My \ Full\NSname ;
    // импортирование глобального класса
    --- Добавлено ---
    да даже если и про аs забыть. мануал говорит же что расположение use должно ж быть другое... или я чото не так понял?
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну тогда это не псевдоним а тупо импорт
    --- Добавлено ---
    не знаю. всегда пишу их вверху или указываю полный путь в коде
     
  7. Savitar

    Savitar Новичок

    С нами с:
    22 дек 2016
    Сообщения:
    26
    Симпатии:
    1
    странно тогда
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ничего странного. импорт происходит на этапе сборки, ветка условия выбирается на этапе выполнения.
    --- Добавлено ---
    обойти можно через переменное имя класса
     
    denis01 нравится это.
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    эх задачу б
    --- Добавлено ---
    @Ganzal кстати @[vs] в москве
     
  10. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    Спасибо всем за разъяснения, я видел эту ремарку на php.net. Хотелось убедиться, что проблема именно в этом... не могли бы поподробнее, как обойти проблему, чтобы обойтись одним php-файлом, а не двумя? Коротко суть задачи: я пробую написать модуль для CMS, там свой MVC, ну вот я и думал, что проблема, возможно, где-то в требованиях этого самого MVC.... а оказалось, что тупо в использовании use не в начале файла. Use необходимо в данном случае для того, чтобы, в зависимости от отмеченного пользователем чекбокса, начать поиск по второй db, а если чекбокс не отмечен, нет смысла и использовать use (db в этом случае может быть попросту не подключен). Отсюда и elseif - если из параметров панели администратора получаем 1 (чекбокс отмечен), тогда, стало быть, use, eсли нет - и т.д. Любые идеи?
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @superlamer посмотри авто загрузку классов, есть готовый PSR как пример, можно и composer ещё глянуть
     
  12. superlamer

    superlamer Новичок

    С нами с:
    2 фев 2017
    Сообщения:
    20
    Симпатии:
    0
    да не катит здесь composer, говорю же, речь о модуле для сиэмэски...
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв