Récapitulatif - Collection personnalisée
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 50 sur 91.
Défi
FacileConstruisons une classe Collection qui réunit toutes les méthodes magiques que tu as découvertes dans ce chapitre. Ta collection servira de conteneur de données flexible et naturel à utiliser : stocker des éléments par clé, vérifier s’ils existent, rechercher des éléments dynamiquement et créer des copies indépendantes.
Tu organiseras ton code dans deux fichiers :
Collection.php: crée une classeCollectionqui stocke les éléments dans un tableau privé. Ta collection doit prendre en charge les méthodes magiques suivantes, qui fonctionnent ensemble :__construct(): accepte un tableau facultatif d’éléments initiaux (un tableau vide par défaut)__get($key): renvoie l’élément correspondant à la clé donnée, ounulls’il n’existe pas__set($key, $value): stocke la valeur à la clé donnée__isset($key): renvoie si la clé existe dans la collection__unset($key): supprime l’élément correspondant à la clé donnée__call($method, $args): gère les méthodes de recherche dynamiques. Lorsqu’une méthode commençant parfindByest appelée (commefindByRoleoufindByStatus), extrais le nom du champ (mets en minuscules la partie située après "findBy"), parcours tous les éléments et renvoie la clé du premier élément dont ce champ correspond au premier argument. Renvoienullsi aucune correspondance n’est trouvée. Pour toute autre méthode, renvoie"Unknown method: [method]"__toString(): renvoie"Collection([count] items)", où count correspond au nombre d’éléments__clone(): lors du clonage, le tableau d’éléments doit être une copie indépendante (et non une référence vers l’original)
main.php: inclus le fichier Collection. Tu recevras trois entrées : un nom de clé, une valeur de rôle et un rôle à rechercher. Construis une collection d’utilisateurs et démontre toutes les méthodes magiques :- Crée une nouvelle
Collection - Ajoute un utilisateur avec la clé fournie en entrée, en stockant un tableau avec
"name"défini sur la clé et"role"défini sur la valeur de rôle fournie en entrée - Ajoute un autre utilisateur avec la clé
"bob", en stockant["name" => "Bob", "role" => "editor"] - Affiche si la clé fournie en entrée existe à l’aide de
isset(): affiche"exists"ou"missing" - Affiche le résultat de l’appel de la méthode dynamique
findByRole()avec le rôle à rechercher comme argument (cela doit renvoyer la clé de l’utilisateur correspondant, ou rien si le résultat est null) - Affiche la collection avec
echo(ce qui déclenche__toString) - Clone la collection, puis supprime la clé fournie en entrée du clone
- Affiche si la clé fournie en entrée existe dans la collection originale : affiche
"exists"ou"missing"(elle doit toujours exister puisque le clone est indépendant)
- Crée une nouvelle
Chaque sortie doit se trouver sur sa propre ligne. La recherche dynamique suppose que chaque élément de ta collection est un tableau associatif contenant des champs comme "name" et "role".
Essayez vous-même
<?php
require_once 'Collection.php';
// Lire les entrées
$keyName = trim(fgets(STDIN));
$roleValue = trim(fgets(STDIN));
$searchRole = trim(fgets(STDIN));
// TODO: Créer une nouvelle Collection
// TODO: Ajouter un utilisateur avec la clé d'entrée, stockant un tableau avec "name" => key et "role" => roleValue
// TODO: Ajouter un autre utilisateur avec la clé "bob", stockant ["name" => "Bob", "role" => "editor"]
// TODO: Afficher si la clé d'entrée existe en utilisant isset() - afficher "exists" ou "missing"
// TODO: Afficher le résultat de l'appel à findByRole() avec searchRole comme argument
// TODO: Afficher la collection en utilisant echo (déclenche __toString)
// TODO: Cloner la collection, puis unset la clé d'entrée du clone
// TODO: Afficher si la clé d'entrée existe dans la collection ORIGINALE - "exists" ou "missing"
?>Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition des méthodesLe mot-clé finalClasses abstraitesRécapitulatif – Hiérarchie des employés7Encapsulation
Public, Protected, PrivateModificateurs d’accès en profondeurAccesseurs et mutateursDissimulation de l’informationPromotion des constructeurs (8.0)Récapitulatif – Système de fiches étudiant10Concepts avancés de la POO
Composition ou héritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibres (PHP 8.1)Approfondissement du clonage d’objetsGénérateurs et itérateurs13Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron Dépôt2Espaces de noms et chargement automatique
Introduction aux espaces de nomsLe mot-clé useNorme de chargement automatique PSR-4Autoloader de ComposerRécapitulatif - Projet organisé5Interfaces et contrats
Introduction aux interfacesImplémentation des interfacesImplémentation de plusieurs interfacesInterface ou classe abstraiteIndication de type avec les interfacesRécapitulatif - Calculateur de formes8Méthodes magiques
Introduction aux méthodes magiques__toString et __debugInfo__get, __set, __isset, __unset__call et __callStatic__clone et clonage d’objets__serialize et __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d’instance vs statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés en lecture seule (PHP 8.1)Récapitulatif - Gestionnaire de comptes bancaires6Polymorphisme
Révision de la redéfinition des méthodesPolymorphisme via les interfacesAnnotations de type et types unionLiaison statique tardiveRécapitulatif - Processeur de paiements9Traits
Introduction aux traitsUtilisation de plusieurs traitsRésolution des conflits entre traitsMéthodes abstraites dans les traitsTraits par rapport à l’héritage12Patrons de conception – Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur PHP en ligne