Menu
Coddy logo textTech

Recapitulação - Projeto Organizado

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 14 de 91.

challenge icon

Desafio

Fácil

Vamos construir uma aplicação de blog completa com organização adequada de namespaces, reunindo tudo o que você aprendeu sobre namespaces, a palavra-chave use e o autoloading PSR-4.

Você criará um projeto bem estruturado com cinco arquivos que demonstram como as aplicações PHP reais organizam seu código:

  • src/Models/Author.php — Defina uma classe Author no namespace Blog\Models. Ela deve ter uma propriedade public $name, um construtor que aceita e define o nome, e um método getBio() que retorna "Author: [name]".
  • src/Models/Post.php — Defina uma classe Post no namespace Blog\Models. Ela deve ter as propriedades public $title e public $author (onde author é um objeto Author). O construtor aceita um título e um objeto Author, definindo ambos. Adicione um método getSummary() que retorna "[title] by [author name]".
  • src/Services/Publisher.php — Defina uma classe Publisher no namespace Blog\Services. Ela deve ter um método publish(Post $post) que aceita um objeto Post e retorna "Published: [post title]". Você precisará importar a classe Post usando a palavra-chave use, já que ela está em um namespace diferente.
  • vendor/autoload.php — Crie um autoloader PSR-4 usando spl_autoload_register que mapeia o prefixo de namespace Blog\ para o diretório src/. Este autoloader único lida com o carregamento de todas as suas classes automaticamente.
  • index.php — Seu ponto de entrada. Requeira o autoloader e, em seguida, use a palavra-chave use para importar Blog\Models\Author, Blog\Models\Post e Blog\Services\Publisher. Crie um Author chamado "Jane Smith", um Post com o título "Getting Started with PHP" usando esse autor, e um Publisher. Imprima a bio do autor, o resumo do post e o resultado da publicação do post (cada um em sua própria linha).

Observe como o serviço Publisher depende do modelo Post — isso demonstra como classes em diferentes namespaces podem trabalhar juntas importando o que precisam com declarações use.

Experimente você mesmo

<?php
// Carrega o autoloader
require_once 'vendor/autoload.php';

// TODO: Importe as classes necessárias usando declarações 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher

// TODO: Crie um Author chamado "Jane Smith"

// TODO: Crie um Post com o título "Getting Started with PHP" usando esse autor

// TODO: Crie um Publisher

// TODO: Imprima a bio do autor

// TODO: Imprima o resumo do post

// TODO: Imprima o resultado da publicação do post
?>

Todas as lições de Programação Orientada a Objetos