Импортировать класс условно с ключевым словом '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
Ключевое слово должно быть объявлено в самой внешней области файла (глобальной области) или в объявлениях пространства имен. Это связано с тем, что импорт выполняется во время компиляции, а не во время выполнения, поэтому его нельзя ограничить областью действия.