Recapitulação - Projeto Organizado
Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 14 de 91.
Desafio
FácilVamos 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 classeAuthorno namespaceBlog\Models. Ela deve ter uma propriedadepublic $name, um construtor que aceita e define o nome, e um métodogetBio()que retorna"Author: [name]".src/Models/Post.php— Defina uma classePostno namespaceBlog\Models. Ela deve ter as propriedadespublic $titleepublic $author(onde author é um objetoAuthor). O construtor aceita um título e um objetoAuthor, definindo ambos. Adicione um métodogetSummary()que retorna"[title] by [author name]".src/Services/Publisher.php— Defina uma classePublisherno namespaceBlog\Services. Ela deve ter um métodopublish(Post $post)que aceita um objetoPoste retorna"Published: [post title]". Você precisará importar a classePostusando a palavra-chaveuse, já que ela está em um namespace diferente.vendor/autoload.php— Crie um autoloader PSR-4 usandospl_autoload_registerque mapeia o prefixo de namespaceBlog\para o diretóriosrc/. 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-chaveusepara importarBlog\Models\Author,Blog\Models\PosteBlog\Services\Publisher. Crie umAuthorchamado"Jane Smith", umPostcom o título"Getting Started with PHP"usando esse autor, e umPublisher. 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
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave $thisMétodosPropriedadesConstrutor (__construct)Destrutor (__destruct)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Palavra-chave parent::Sobrescrita de MétodoA Palavra-chave finalClasses AbstratasRecapitulação - Hierarquia de Funcionários7Encapsulamento
Público, Protegido, PrivadoModificadores de Acesso em DetalhesGetters e SettersOcultação de InformaçãoPromoção de Construtor (8.0)Recapitulação - Sistema de Registro de Alunos10Conceitos Avançados de POO
Composição vs HerançaInjeção de DependênciaClasses AnônimasEnums (PHP 8.1)Fibers (PHP 8.1)Mergulho Profundo em Clonagem de ObjetosGeradores e Iteradores13Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Repository2Namespaces e Autoloading
Introdução a NamespacesA Palavra-chave usePadrão de Autoloading PSR-4Autoloader do ComposerRecapitulação - Projeto Organizado5Interfaces e Contratos
Introdução a InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesInterface vs Classe AbstrataType Hinting com InterfacesRecapitulação - Calculadora de Formas8Métodos Mágicos
Introdução aos Métodos Mágicos__toString e __debugInfo__get, __set, __isset, __unset__call e __callStatic__clone e Clonagem de Objetos__serialize e __unserializeRecapitulação - Coleção Personalizada11Sistema de Tipos e Tratamento de Erros
Declarações de TiposTipos AnuláveisTipos de União e InterseçãoClasses de ExceçãoHierarquia de Exceções PersonalizadasTry, Catch, FinallyRecapitulação - Validador de Formulário14Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário3Propriedades de Classe
Propriedades de Instância vs EstáticasConstantes em ClassesMétodos e Propriedades EstáticosPropriedades Privadas e ProtegidasPropriedades Readonly (PHP 8.1)Recapitulação - Gerenciador de Conta Bancária6Polimorfismo
Sobrescrita de Métodos RevisitadaPolimorfismo via InterfacesType Hinting e Union TypesLate Static BindingRecapitulação - Processador de Pagamentos9Traits
Introdução a TraitsUsando Múltiplos TraitsResolução de Conflitos de TraitsMétodos Abstratos em TraitsTraits vs Herança12Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy