Menu
Coddy logo textTech

Récapitulatif - Collection personnalisée

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 50 sur 91.

challenge icon

Défi

Facile

Construisons une classe Collection qui rassemble toutes les méthodes magiques que vous avez apprises dans ce chapitre. Votre collection agira comme un conteneur de données flexible et naturel à utiliser — stockant des éléments par clé, vérifiant s'ils existent, trouvant des éléments de manière dynamique et créant des copies indépendantes.

Vous organiserez votre code sur deux fichiers :

  • Collection.php — Créez une classe Collection qui stocke les éléments dans un tableau privé. Votre collection doit prendre en charge ces méthodes magiques travaillant ensemble :
    • __construct() — Accepte un tableau optionnel d'éléments initiaux (par défaut un tableau vide)
    • __get($key) — Retourne l'élément à la clé donnée, ou null s'il n'existe pas
    • __set($key, $value) — Stocke la valeur à la clé donnée
    • __isset($key) — Retourne si la clé existe dans la collection
    • __unset($key) — Supprime l'élément à la clé donnée
    • __call($method, $args) — Gère les méthodes de recherche dynamiques. Lorsqu'une méthode commençant par findBy est appelée (comme findByRole ou findByStatus), extrayez le nom du champ (mettez en minuscules la partie après "findBy"), parcourez tous les éléments et retournez la clé du premier élément où ce champ correspond au premier argument. Retournez null si aucune correspondance n'est trouvée. Pour toute autre méthode, retournez "Unknown method: [method]"
    • __toString() — Retourne "Collection([count] items)" où count est le nombre d'éléments
    • __clone() — Lors du clonage, le tableau d'éléments doit être une nouvelle copie (pas une référence à l'original)
  • main.php — Incluez le fichier Collection. Vous recevrez trois entrées : un nom de clé, une valeur de rôle et un rôle de recherche. Construisez une collection d'utilisateurs et démontrez toutes les méthodes magiques :
    • Créez une nouvelle Collection
    • Ajoutez un utilisateur avec la clé d'entrée, en stockant un tableau avec "name" défini sur la clé et "role" défini sur la valeur de rôle d'entrée
    • Ajoutez un autre utilisateur avec la clé "bob", en stockant ["name" => "Bob", "role" => "editor"]
    • Affichez si la clé d'entrée existe en utilisant isset() — affichez "exists" ou "missing"
    • Affichez le résultat de l'appel de la méthode dynamique findByRole() avec le rôle de recherche comme argument (cela devrait retourner la clé de l'utilisateur correspondant, ou rien si null)
    • Affichez la collection en utilisant echo (déclenche __toString)
    • Clonez la collection, puis supprimez la clé d'entrée du clone
    • Affichez si la clé d'entrée existe dans la collection originale — affichez "exists" ou "missing" (elle devrait toujours exister car le clone est indépendant)

Chaque sortie doit être sur sa propre ligne. Le chercheur dynamique suppose que chaque élément de votre collection est un tableau associatif avec 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, en stockant le tableau avec "name" => key et "role" => roleValue

// TODO: Ajouter un autre utilisateur avec la clé "bob", en stockant ["name" => "Bob", "role" => "editor"]

// TODO: Afficher si la clé d'entrée existe en utilisant isset() - sortie "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 supprimer la clé d'entrée du clone avec unset

// 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