Повторение — структурированный проект
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 14 из 91.
Задание
ЛегкоДавайте создадим полноценное блог-приложение с правильной организацией namespace, объединив всё, что вы узнали о namespace, ключевом слове use и автозагрузке PSR-4.
Вы создадите хорошо структурированный проект из пяти файлов, демонстрирующих, как реальные приложения на PHP организуют свой код:
src/Models/Author.php: ОпределитеAuthorclass в namespaceBlog\Models. У него должно быть свойствоpublic $name, constructor, который принимает и устанавливает имя, а такжеgetBio()method, возвращающий"Author: [name]".src/Models/Post.php: ОпределитеPostclass в namespaceBlog\Models. У него должны быть свойстваpublic $titleиpublic $author(где author — объектAuthor). Constructor принимает заголовок и объектAuthor, устанавливая оба значения. ДобавьтеgetSummary()method, возвращающий"[title] by [author name]".src/Services/Publisher.php: ОпределитеPublisherclass в namespaceBlog\Services. У него должен быть methodpublish(Post $post), который принимает объектPostи возвращает"Published: [post title]". Вам потребуется импортироватьPostclass с помощью ключевого словаuse, поскольку он находится в другом namespace.vendor/autoload.php: Создайте автозагрузчик PSR-4 с помощьюspl_autoload_register, который сопоставляет prefix namespaceBlog\с directorysrc/. Этот единый autoloader автоматически загружает все ваши classes.index.php: Ваша entry point. Подключите autoloader, затем используйте ключевое словоuse, чтобы импортироватьBlog\Models\Author,Blog\Models\PostиBlog\Services\Publisher. СоздайтеAuthorс именем"Jane Smith",Postс заголовком"Getting Started with PHP", используя этого author, иPublisher. Выведите bio author, summary post и результат публикации post (каждый с новой строки).
Обратите внимание, как service Publisher зависит от model Post. Это демонстрирует, как classes в разных namespace могут работать вместе, импортируя необходимые им компоненты с помощью statements use.
Попробуйте сами
<?php
// Подключите автозагрузчик
require_once 'vendor/autoload.php';
// TODO: Импортируйте необходимые классы с помощью операторов 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: Создайте Author с именем "Jane Smith"
// TODO: Create a Post with title "Getting Started with PHP" using that author
// TODO: Создайте Publisher
// TODO: Выведите биографию автора
// TODO: Выведите краткое содержание поста
// TODO: Выведите результат публикации поста
?>Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Повторение — простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыПовторение — иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateМодификаторы доступа подробноГеттеры и сеттерыСокрытие информацииПродвижение конструктора (8.0)Повторение — система учёта студентов2Пространства имён и автозагрузка
Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс и абстрактный классАннотация типов с интерфейсамиПовторение — калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeПовторение — пользовательская коллекция3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищённые свойстваСвойства только для чтения (PHP 8.1)Повторение — менеджер банковского счёта6Полиморфизм
Повторение переопределения методовПолиморфизм через интерфейсыАннотации типов и объединённые типыПозднее статическое связываниеПовторение — обработчик платежей9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования, часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн StrategyПотренируйтесь самостоятельно: Онлайн-компилятор PHP