Итоги: структурированный проект
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy — урок 14 из 91.
Задание
ЛегкоДавайте создадим полноценное приложение для блога с правильной организацией пространств имен, объединив все, что вы узнали о пространствах имен, ключевом слове use и автозагрузке PSR-4.
Вы создадите хорошо структурированный проект из пяти файлов, который демонстрирует, как реальные PHP-приложения организуют свой код:
src/Models/Author.php— Определите классAuthorв пространстве именBlog\Models. У него должно быть свойствоpublic $name, конструктор, который принимает и устанавливает имя, и методgetBio(), возвращающий"Author: " . $this->name.src/Models/Post.php— Определите классPostв пространстве именBlog\Models. У него должны быть свойстваpublic $titleиpublic $author(где author — это объектAuthor). Конструктор принимает заголовок и объектAuthor, устанавливая оба значения. Добавьте методgetSummary(), который возвращает$this->title . " by " . $this->author->name.src/Services/Publisher.php— Определите классPublisherв пространстве именBlog\Services. У него должен быть методpublish(Post $post), который принимает объектPostи возвращает"Published: " . $post->title. Вам нужно будет импортировать классPostс помощью ключевого словаuse, так как он находится в другом пространстве имен.vendor/autoload.php— Создайте автозагрузчик PSR-4 с помощьюspl_autoload_register, который сопоставляет префикс пространства именBlog\с директориейsrc/. Этот единственный автозагрузчик будет автоматически обрабатывать загрузку всех ваших классов.index.php— Ваша точка входа. Подключите автозагрузчик, затем используйте ключевое словоuseдля импортаBlog\Models\Author,Blog\Models\PostиBlog\Services\Publisher. Создайте объектAuthorс именем"Jane Smith", объектPostс заголовком"Getting Started with PHP", используя этого автора, и объектPublisher. Выведите биографию автора, краткое описание поста и результат публикации поста (каждый пункт с новой строки).
Обратите внимание, как сервис Publisher зависит от модели Post — это демонстрирует, как классы в разных пространствах имен могут работать вместе, импортируя то, что им нужно, с помощью операторов use.
Попробуйте сами
<?php
// Подключить автозагрузчик
require_once 'vendor/autoload.php';
// TODO: Импортируйте необходимые классы, используя операторы 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: Создайте автора (Author) по имени "Jane Smith"
// TODO: Создайте пост (Post) с заголовком "Getting Started with PHP", используя этого автора
// TODO: Создайте издателя (Publisher)
// TODO: Выведите биографию автора
// TODO: Выведите краткое содержание поста
// TODO: Выведите результат публикации поста
?>Все уроки раздела Объектно-ориентированное программирование
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