Modèle objet de PHP (2)

Licence Informatique 2ème année

Youssef Chahir - Alexandre Niveau - Jean-Marc Lecarpentier

 

Modèle objet de PHP (2)

Notes de cours

Travail personnel

Objectifs

Nous poursuivons notre exploration de PHP en nous focalisant sur les concepts orientés objet.

  • Apprendre à lire un fichier CSV en PHP.
  • Extraire les informations pertinentes du fichier CSV.
  • Effectuer des statistiques à partir des données.

Exercice 1 — Lecture d'un fichier CSV et statistiques sur les naissances #

Dans cet exercice, nous allons manipuler un fichier CSV contenant des données sur les prénoms donnés à Paris. Le fichier est accessible sur le portail de Paris.

1. Création d'une classe CSVReader pour la manipulation du fichier csv :

  • Téléchargez le fichier des données de naissance à Paris. Décompressez l'archive et placez le fichier CSV dans votre répertoire courant.
    Le fichier CSV contient les colonnes "Sexe", "Annee", "Prenoms" et "Nombre prénoms déclarés" à Paris. Les données sont séparées par virgules. Ainsi, par exemple, la ligne :
    M,2011,Yacine,46 signifie qu'en 2011, 46 bébés assignés garçons ont été prénommés Yacine.
    F,2012,Abigail,7 signifie qu'en 2012, 7 bébés assignés filles ont été prénommés Abigail.
  • Dans un script PHP, créez une classe nommée CSVReader avec :
    • Une propriété privée $donnees de type tableau et une propriété privée $url de type chaîne de caractères.
    • Une méthode privée lireCSVqui ouvre le fichier CSV en utilisant l'URL fournie, lit son contenu ligne par ligne, et stocke chaque ligne dans le tableau $donnees.
    • Une méthode publique getDonnees qui renvoie le tableau de données.
    • <?php
      
      class CSVReader {
          // Déclaration des propriétés de la classe
          /*
             à définir .....
           
           */
      
          public function __construct(string $url) {
              /*
                 à compléter  .....
               */
          }
      
          private function lireCSV() {
              $fichier = fopen($this->url, 'r');
      
              if ($fichier === false) {
                  throw new Exception("Impossible d'ouvrir le fichier CSV.");
              }
      
              // Ignorer la première ligne (entêtes)
              fgets($fichier);
      
              while (($line = fgets($fichier)) !== false) {
                  // enlever le caractère de fin de ligne
                  $line = trim($line);
                  /*
                     à compléter  ...
                   */
                  
                  // $infos est un tableau avec sexe, prénom, année, département, nombre
                  // diviser la chaîne de caractères $line en un tableau, en utilisant
                  // la virgule (,) comme délimiteur et remplir le tableau $this->donnees
                  /*
                     à compléter  ...
                   */
                  
              }
      
              // fermer le fichier
              fclose($fichier);
          }
          
          // Créez les getters : getDonnees(), ...
          /*
             à compléter  ...
           */
      }
      ?>
      
  • Affichez le nombre total de personnes en préciant la proportion des garçons et des filles. Par exemple :
    Nombre total de personnes : 619873 (324276 M + 295597 F)
    Proportion de garçons :  52.313296433302% des naisssances.
    Proportion de filles :  47.686703566698% des naisssances.
    
  • Affichez le nombre de garçons et de filles qui sont nés en 2023.
    Nombre de garçons nés en 2023 : 14184
    Nombre de filles nées en 2023 : 12727
    

2. Création d'une classe Personne :

  • Créez une classe Personne en PHP 8 qui représente une personne avec les caractéristiques suivantes : sexe, année de naissance et prénom. Assurez-vous d'utiliser des types déclarés pour garantir le bon type des données. La classe doit également avoir une méthode __toString() qui génère une représentation textuelle de la personne, indiquant si c'est un garçon ou une fille et précisant le prénom et l'année de naissance.
  • Compléter la classe CSVReader avec :
    • Une propriété private array $personnes
    • qui contiendra toutes les instances des personnes.
    • Ajouter au tableau $personnes dans la méthode lireCSV()
    • toutes personnes (objet Personne.
  • Affichez tous les prénoms de garçons nés en 2011 dont le prénom commence par 'A'.
  • Proposer une alterenative en uilisant array_filter.