Ключевое слово 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(...).
Попробуйте сами
<?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Потренируйтесь самостоятельно: Онлайн-компилятор PHP