Импортировать класс условно с ключевым словом 'use'

Я никогда не видел эту структуру нигде, поэтому мне интересно, есть ли что-то не так с таким выражением:

if (condition) {

    use Symfony\Component\HttpFoundation\Response;

}

2 ответа

Решение

Единственная вещь use делает это для псевдонима класса. Вот и все. Ничего более.
Вместо того, чтобы многократно писать полное имя класса в вашем скрипте:

$q = new \Foo\Bar\Baz\Quux;
if ($q instanceof \Foo\Bar\Baz\Quux) ...

Вы можете сократить это до:

use Foo\Bar\Baz\Quux;

$q = new Quux;
if ($q instanceof Quux) ...

Таким образом, нет никакого смысла хотеть использовать use условно. Это просто синтаксический помощник; если бы его можно было использовать условно, ваш синтаксис скрипта стал бы неоднозначным, чего никто не хочет.

Это не уменьшает загрузку кода, потому что код загружается только явно require/include звонки или через автозагрузку. Последний вариант весьма предпочтителен, поскольку он уже лениво включается в действие только при необходимости.

Это вызовет синтаксическую ошибку. Из ПМФ:

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

Другие вопросы по тегам