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 criar uma aplicação de blog completa com uma 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 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(em que 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, pois ela está em um namespace diferente.vendor/autoload.php: Crie um autoloader PSR-4 usandospl_autoload_registerque mapeie o prefixo de namespaceBlog\para o diretóriosrc/. Esse único autoloader cuida do carregamento automático de todas as suas classes.index.php: Seu ponto de entrada. Inclua 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 biografia 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 namespaces diferentes podem trabalhar juntas importando o que precisam com instruções use.
Experimente você mesmo
<?php
// Requer 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: Create a Post with title "Getting Started with PHP" using that author
// 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 OOP
Arquivos externosIntrodução à OOPClasses vs. objetosA palavra-chave $thisMétodosPropriedadesConstrutor (__construct)Destrutor (__destruct)Recapitulação - Calculadora simples4Herança
Herança BásicaA Palavra-chave parent::Sobrescrita de MétodosA Palavra-chave finalClasses AbstratasRecapitulação - Hierarquia de Funcionários7Encapsulamento
Público, Protegido, PrivadoModificadores de Acesso em ProfundidadeGetters e SettersOcultação de InformaçõesPromoção de Construtor (8.0)Recapitulação - Sistema de Registros de Alunos10Conceitos Avançados de OOP
Composição vs. HerançaInjeção de DependênciaClasses AnônimasEnums (PHP 8.1)Fibras (PHP 8.1)Análise Profunda da 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 às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesInterface vs Classe AbstrataTipagem 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 NulosTipos de União e InterseçãoClasses de ExceçãoHierarquia de Exceções PersonalizadaTry, Catch, FinallyRecapitulação - Validador de Formulário14Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses de Livros e Usuários3Propriedades de Classes
Propriedades de Instância vs. EstáticasConstantes em ClassesMétodos e Propriedades EstáticosPropriedades Privadas e ProtegidasPropriedades Somente para Leitura (PHP 8.1)Recapitulação - Gerenciador de Contas Bancárias6Polimorfismo
Revisão da Sobrescrita de MétodosPolimorfismo via InterfacesIndicação de Tipos e Tipos UnionVinculação Estática TardiaRecapitulação - Processador de Pagamentos9Traits
Introdução a TraitsUsando Múltiplos TraitsResolução de Conflitos entre 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 StrategyPratique por conta própria: Compilador de PHP online