Поскольку о ключевом слове «использовать» легче узнать, зная о «пространстве имен», позвольте мне сначала объяснить пространство имен, рассмотрев базовый проект Laravel.
Существует класс контроллера с именем: Controller.php , который находится в пути:
app / Http / Controllers из корневого каталога проекта
Существует также другой класс контроллеров с именем: Controller.php , но этот находится в пути:
vendor / laravel / framework / src / Illuminate / Routing из корневого каталога проекта
Вам пока не нужно смотреть на исходный код, если вы новичок в php, потому что это может сбить вас с толку, вместо этого позвольте мне объяснить вам часть
это то, что нам небезразлично и поможет нам понять «пространство имен» и «использование».
Итак, по сути, наш первый класс контроллеров:
app / Http / Controllers / Controller.php необходимо использовать
Второй класс контроллеров поставщик / laravel / framework / src / Illuminate / Routing / Controller.php .
ему действительно нужно расширить этот класс, чтобы иметь доступ к его содержимому для обработки некоторых важных функций маршрутизации.
Так как класс может расширить другой класс с таким же именем?
class Controller extends Controller
? это НЕ будет работать,
если только нет способа различить эти два класса , и именно здесь namespace
пригодится и ключевое слово use
помогает завершить миссию, позволяя использовать; (классы; методы; интерфейсы и константы) с одинаковыми именами в одной и той же области видимости.
Теперь, как это делается в коде? очень просто! если мы посмотрим на app / Http / Controllers / Controller.php исходный код, мы можем увидеть в верхней части класса
Пространство имен объявляется как: namespace App\Http\Controllers
, поэтому вы даете своему классу пространство имен, чтобы на него могли ссылаться другие классы.
теперь это выглядит так же, как путь к этому классу из корневого каталога проекта, с небольшой разницей, и это использование «\
» вместо «/
«
(аналогично командной строке в windows) ,
но есть еще одно отличие, и это приложение с большой буквы «А» в пространстве имен по сравнению с «приложением» с
Строчные "a" на пути. Также обратите внимание, что пространство имен чувствительно к регистру.
Таким образом, пространство имен - это отдельная концепция, чем путь, оно может следовать структуре пути, если это помогает, но не обязательно должно быть точным путем к
класс, метод, интерфейсы или константы , например, взгляните на:
поставщик / laravel / framework / src / Illuminate / Routing / Controller.php исходный код,
мы видим в верхней части класса, пространство имен объявлено как: Illuminate\Routing
Теперь давайте посмотрим на ключевое слово «use
»,
мы используем ключевое слово «use
», чтобы наш класс знал о конкретном классе или функции, которую мы хотим использовать в нашем классе
поэтому мы не импортируем и не включаем ничего мы просто сообщаем нашему классу, что будем использовать определенный класс или
метод, ссылаясь на них по их пространству имен
Давайте взглянем на app / Http / Controllers / Controller.php исходный код,
как видно из строки: «use Illuminate\Routing\Controller as BaseController
», ключевое слово «use
», за которым следует namespace
для целевого класса
(обратите внимание, что Illuminate \ Routing \ Controller.php и Illuminate \ Routing \ Controller ‘без расширения .php 'являются взаимозаменяемыми)
мы можем использовать ключевое слово «as
» вместе с ключевым словом «use
», чтобы дать конкретному классу, методу, интерфейсам или константам псевдоним, который позволяет
app / Http / Controllers / Controller.php для расширения Подсветить \ Routing \ Controller.php как BaseController в строке:
«class Controller extends BaseController
».