Ключевое слово use
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy — урок 11 из 91.
Написание полного пути пространства имен каждый раз, когда вы используете класс, может стать утомительным. Ключевое слово use позволяет импортировать класс в начале файла, чтобы вы могли обращаться к нему по его короткому имени.
Вместо того чтобы писать \Blog\User снова и снова, вы можете импортировать его один раз:
<?php
use Blog\User;
$user = new User("Alice");
echo $user->name;
Когда вам нужны классы из разных пространств имен с одинаковыми именами, вы можете создать псевдоним, используя ключевое слово as:
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
echo $blogger->name . "\n";
echo $customer->email . "\n";
Вывод:
Alice
alice@example.com
Вы также можете импортировать несколько классов из одного и того же пространства имен, используя групповой импорт:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Ключевой момент: Инструкция use должна располагаться после объявления namespace (если оно есть) и перед любым другим кодом. Это делает ваш код чище и легче для чтения, устраняя повторяющиеся пути пространств имен.
Задание
ЛегкоДавайте организуем приложение для обмена сообщениями, используя ключевое слово use для чистого импорта классов и избегания написания полных путей пространств имен повсюду.
Вы создадите три файла, которые работают вместе:
Messaging/Email.php— Определите классEmailв пространстве именMessaging. Он должен иметь свойствоpublic $address, конструктор, который принимает и устанавливает адрес, и методsend(), который возвращает"Sending email to [address]".Messaging/SMS.php— Определите классSMSв пространстве именMessaging. Он должен иметь свойствоpublic $phone, конструктор, который принимает и устанавливает номер телефона, и методsend(), который возвращает"Sending SMS to [phone]".main.php— Подключите оба файла классов, затем используйте ключевое словоuseдля импорта обоих классов. Создайте объектEmailс адресом"alice@example.com"и объектSMSс телефоном"555-1234". Выведите результат вызоваsend()для каждого объекта (каждый на новой строке).
В main.php вместо написания new \Messaging\Email(...) вы импортируете классы в начале с помощью операторов use, чтобы можно было просто писать new Email(...) и new SMS(...).
Шпаргалка
Ключевое слово use импортирует класс в начале вашего файла, позволяя вам обращаться к нему по короткому имени вместо полного пути пространства имен:
<?php
use Blog\User;
$user = new User("Alice");
Когда классы из разных пространств имен имеют одинаковые имена, создайте псевдоним с помощью ключевого слова as:
<?php
use Blog\User as BlogUser;
use Shop\User as ShopUser;
$blogger = new BlogUser("Alice");
$customer = new ShopUser("alice@example.com");
Импортируйте несколько классов из одного и того же пространства имен, используя групповой импорт:
<?php
use Blog\{User, Post, Comment};
$user = new User("Alice");
$post = new Post("Hello World");
Инструкция use должна располагаться после объявления namespace (если оно есть) и перед любым другим кодом.
Попробуйте сами
<?php
// Подключите файлы классов
require_once 'Messaging/Email.php';
require_once 'Messaging/SMS.php';
// TODO: Используйте ключевое слово 'use' для импорта обоих классов из пространства имен Messaging
// Это позволит вам писать 'new Email(...)' вместо 'new \Messaging\Email(...)'
// TODO: Создайте объект Email с адресом "alice@example.com"
// TODO: Создайте объект SMS с номером телефона "555-1234"
// TODO: Выведите результат вызова send() для каждого объекта (каждый на новой строке)
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Итоги — Простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыИтоги — Иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateПодробный разбор модификаторов доступаГеттеры и сеттерыСокрытие данныхConstructor Promotion (8.0)Итоги — Система учета студентов10Продвинутые концепции ООП
Композиция против наследованияВнедрение зависимостейАнонимные классыПеречисления (PHP 8.1)Файберы (PHP 8.1)Глубокое погружение в клонирование объектовГенераторы и итераторы13Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий2Пространства имен и автозагрузка
Введение в пространства именКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerИтоги: структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс против абстрактного классаType Hinting с интерфейсамиИтоги — Калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeИтоги — Кастомная коллекция11Система типов и обработка ошибок
Объявление типовNullable-типыТипы объединения и пересеченияКлассы исключенийИерархия пользовательских исключенийTry, Catch, FinallyИтоги — Валидатор форм14Проект: Управление библиотекой
Обзор проектаКлассы Book и User3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищенные свойстваСвойства Readonly (PHP 8.1)Итоги — Менеджер банковского счета6Полиморфизм
Снова о переопределении методовПолиморфизм через интерфейсыType Hinting и Union TypesПозднее статическое связываниеИтоги — Payment Processor9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy