QCM POO đź“‹

🚀 PARTIE 1

đź“Ś Description

Afin d’utiliser la POO PHP dans un cas concret, essayons de refaire la logique du TP quiz avec des classes. Pour cette première partie, pas besoin de base de données (rien ne sera enregistré), mais vous pouvez vous inspirer de la logique de votre TP vanilla pour imaginer les propriétés et les méthodes de ces classes.

Vous aurez besoin de trois classes :

  • Qcm
  • Question
  • Answer

De sortes que :

  • Un QCM regroupe l’ensemble des questions composant le quiz et la mĂ©thode qui permet d’afficher toutes les questions dans notre HTML.
  • Une Question contient un corps sous forme de texte et plusieurs Answers ainsi que l’explication de la bonne rĂ©ponse.
  • Une Answer contient un texte ainsi que l'attribut permettant d’identifier si c’est une bonne rĂ©ponse.

Vous n’aurez pas besoin de l’héritage. On l’utilise lorsque avec des classes A et B, on peut dire que B est un A. Or ici une réponse n'est pas une question, une question n'est pas un Qcm.

🌳 Arborescence

Vous organiserez vos fichiers ainsi :

  • Un dossier class contenant vos 3 classes
  • Un dossier config qui ne contient rien pour le moment
  • Le fichier index.php Ă  la racine

⚙️ Fonctionnalités requises

  • Ajouter une question
    • Pouvoir ajouter les rĂ©ponses possibles Ă  une question
    • Pouvoir dĂ©finir la bonne rĂ©ponse comme telle
  • Pouvoir dĂ©finir les explications de la rĂ©ponse d'une question.

Il doit être possible de faire ceci pour générer un Qcm :

$qcm = new Qcm();
$question1 = new Question('POO signifie :');
$question1->addAnswer(new Answer('Php Orienté Objet'));
$question1->addAnswer(new Answer('ProgrammatiOn Orientée Outil'));
$question1->addAnswer(new Answer('Programmation Orientée Objet', Answer::BONNE_REPONSE));
$question1->addAnswer(new Answer('Papillon Onirique Ostentatoire'));
$question1->setExplications('Sans commentaires si vous avez eu faux :-°');
$qcm->addQuestion($question1);
$qcm->generate();

🚀 PARTIE 2

đź“Ś Description

Vous avez réussi à créer vos 3 classes ? Parfait, essayons d’utiliser PDO dans nos objets maintenant. Voici la liste des modifications à apporter.

đź“‹ QCM

QCM doit devenir notre Manager, il contiendra en plus une instance de PDO dans une private $db qui sera initialisé dans son constructeur. Nous allons créer une nouvelle méthode public getQuestions() qui utilisera une requête PDO pour récupérer les questions de la base de données de votre quiz. La fonction generate() reste inchangée.

âť“ Question

Nous devons transformer cette classe en une “Entité”, c'est-à-dire qu’elle doit avoir autant de propriétés qu’il y a de colonnes dans votre table (avec les accesseurs et mutateurs correspondants).

✏️ Answer

Vous allez devoir créer une table answer et extraire les réponses de votre table question. Ensuite, vous devez appliquer le même traitement à cette classe que pour la classe Question (en faire une Entité).

La fonction getQuestions() ne doit que gérer la requête SQL, créez une nouvelle private function qui fonctionnera ainsi :

  • Recevoir en argument le tableau de donnĂ©es rĂ©cupĂ©rĂ© par la requĂŞte
  • Instancier les objets Question et Answer avec ce tableau
  • Cette nouvelle fonction sera appelĂ©e par getQuestion()

Il doit être possible de faire ceci pour générer un Qcm :

$db = new PDO();
$qcm = new Qcm($db);
$qcm->getQuestions();
$qcm->generate();

⚠️ ATTENTION !

Nous n’implémentons pas la logique du traitement des réponses dans ce TP. Le but de ce TP est de vous familiariser avec une nouvelle logique, donc on y va pas à pas. 🚀