Что именно происходит, когда вы помещаете оператор использования перед оператором пространства имен в PHP?> - PullRequest
1 голос
/ 13 января 2020
<?php
namespace A;
Use \B\C;
C::bar();

Это вызовет эту ошибку: Класс 'B \ C' не найден

(используйте работу)

<?php
Use \B\C;
namespace A;
C::bar();

Это вызовет эту ошибку: Класс 'A \ C 'не найдено

(использовать не работает)

manpage говорит:

Ключевое слово use должно быть объявлено в самая внешняя область файла (глобальная область) или внутри объявлений пространства имен.

Если ключевое слово use должно предшествовать пространству имен, не должно ли оно вызвать ошибку компиляции или предупреждение в противном случае? Или что именно происходит, если ключевое слово use используется перед ключевым словом namespace? Сбрасывает ли ключевое слово namepsace импорт, выполненный с использованием ключевого слова use?

1 Ответ

2 голосов
/ 13 января 2020

use применяется к пространству имен, в котором оно было объявлено. Таким образом, ваш первый пример означает, " Для кода в пространстве имен A, C означает \B\C, " и ваш код находится в пространстве имен A, поэтому псевдоним срабатывает. Ваш второй пример означает: « Для кода без пространства имен, C означает \B\C, », но ваш код находится в пространстве имен A, поэтому псевдоним не срабатывает. Это может помочь вам подумать о следующих примерах:

namespace A {
    use B\C;
    C::bar();
}

И:

use B\C;
namespace A {
    C::bar();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...