Menu
Coddy logo textTech

Повторение — структурированный проект

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 14 из 91.

challenge icon

Задание

Легко

Давайте создадим полноценное блог-приложение с правильной организацией namespace, объединив всё, что вы узнали о namespace, ключевом слове use и автозагрузке PSR-4.

Вы создадите хорошо структурированный проект из пяти файлов, демонстрирующих, как реальные приложения на PHP организуют свой код:

  • src/Models/Author.php: Определите Author class в namespace Blog\Models. У него должно быть свойство public $name, constructor, который принимает и устанавливает имя, а также getBio() method, возвращающий "Author: [name]".
  • src/Models/Post.php: Определите Post class в namespace Blog\Models. У него должны быть свойства public $title и public $author (где author — объект Author). Constructor принимает заголовок и объект Author, устанавливая оба значения. Добавьте getSummary() method, возвращающий "[title] by [author name]".
  • src/Services/Publisher.php: Определите Publisher class в namespace Blog\Services. У него должен быть method publish(Post $post), который принимает объект Post и возвращает "Published: [post title]". Вам потребуется импортировать Post class с помощью ключевого слова use, поскольку он находится в другом namespace.
  • vendor/autoload.php: Создайте автозагрузчик PSR-4 с помощью spl_autoload_register, который сопоставляет prefix namespace Blog\ с directory src/. Этот единый 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: Выведите результат публикации поста
?>

Все уроки раздела Объектно-ориентированное программирование

2Пространства имён и автозагрузка

Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект

Потренируйтесь самостоятельно: Онлайн-компилятор PHP