Récapitulatif - Projet organisé
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 14 sur 91.
Défi
FacileConstruisons une application de blog complète avec une organisation appropriée des espaces de noms, en regroupant tout ce que vous avez appris sur les espaces de noms, le mot-clé use et l'autochargement PSR-4.
Vous allez créer un projet bien structuré avec cinq fichiers qui démontrent comment les applications PHP réelles organisent leur code :
src/Models/Author.php— Définissez une classeAuthordans l'espace de nomsBlog\Models. Elle doit avoir une propriétépublic $name, un constructeur qui accepte et définit le nom, et une méthodegetBio()qui retourne"Author: [name]".src/Models/Post.php— Définissez une classePostdans l'espace de nomsBlog\Models. Elle doit avoir des propriétéspublic $titleetpublic $author(où author est un objetAuthor). Le constructeur accepte un titre et un objetAuthor, en définissant les deux. Ajoutez une méthodegetSummary()qui retourne"[title] by [author name]".src/Services/Publisher.php— Définissez une classePublisherdans l'espace de nomsBlog\Services. Elle doit avoir une méthodepublish(Post $post)qui accepte un objetPostet retourne"Published: [post title]". Vous devrez importer la classePosten utilisant le mot-cléusepuisqu'elle se trouve dans un espace de noms différent.vendor/autoload.php— Créez un autochargeur PSR-4 en utilisantspl_autoload_registerqui mappe le préfixe d'espace de nomsBlog\au répertoiresrc/. Cet autochargeur unique gère automatiquement le chargement de toutes vos classes.index.php— Votre point d'entrée. Appelez l'autochargeur avec require, puis utilisez le mot-cléusepour importerBlog\Models\Author,Blog\Models\PostetBlog\Services\Publisher. Créez unAuthornommé"Jane Smith", unPostavec le titre"Getting Started with PHP"en utilisant cet auteur, et unPublisher. Affichez la bio de l'auteur, le résumé de l'article et le résultat de la publication de l'article (chacun sur sa propre ligne).
Remarquez comment le service Publisher dépend du modèle Post — cela démontre comment des classes dans différents espaces de noms peuvent travailler ensemble en important ce dont elles ont besoin avec des instructions use.
Essayez vous-même
<?php
// Charger l'autoloader
require_once 'vendor/autoload.php';
// TODO: Importer les classes nécessaires en utilisant les instructions 'use'
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: Créer un auteur nommé "Jane Smith"
// TODO: Créer un article avec le titre "Getting Started with PHP" en utilisant cet auteur
// TODO: Créer un éditeur (Publisher)
// TODO: Afficher la biographie de l'auteur
// TODO: Afficher le résumé de l'article
// TODO: Afficher le résultat de la publication de l'article
?>Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie