Импорт классов и пространств имен в PHP: Какая разница в обратном слэше в начале пути? ?

В чем разница между этими двумя:

use Exception;
use \Exception;

Или теми:

use Foo\Bar;
use \Foo\Bar;

В руководстве говорится:

Примечание что для имен в пространстве имен (полностью полные имена пространств имен, содержащие разделитель пространства имен, например Foo \ Bar в отличие от глобальных имен, которые нет, например FooBar), ведущий обратная косая черта не нужна и не разрешено, поскольку имена импорта должны быть полностью квалифицированы и не обрабатываются относительно текущего пространства имен.

Но я этого не совсем понимаю, так как все вышеперечисленные варианты работают, то есть это определенно не «запрещено».

Взгляд на zend_do_use показал , что is_global (устанавливается, когда есть начальная обратная косая черта) используется только для предупреждения в следующем случае:

namespace {
    use Exception;
}

Что говорит мне: «Оператор использования с несложным именем 'Exception' имеет нет эффекта". (Хотя то же самое с use \ Exception будет иметь такой же небольшой эффект, но не выдаст предупреждение.)

Итак: Я что-то упустил? Есть ли разница на самом деле?

44
задан dreftymac 17 October 2019 в 13:56
поделиться