Exercices corrigés PHP – Programmation Orientée Objet | Partie 2

Avec des exercices corrigés en PHP, vous pratiquerez divers concepts du langage de programmation PHP. Vous commencerez par des exercices PHP de base à des exercices plus avancés. La solution est fournie pour chaque exercice. Vous devez essayer de résoudre chaque problème par vous-même avant de vérifier la solution. Si vous avez des questions concernant chaque problème, nous vous encourageons à les poster sur notre forum.

 
 

Exercice 1:

Écrivez un programme PHP pour créer une classe appelée « FeuDeCirculation » avec des attributs pour la couleur et la durée, et des méthodes pour changer la couleur et vérifier si le feu est rouge ou vert.

Diagrame de classe:

Solution:

<?php
// Définir la classe FeuDeCirculation
class FeuDeCirculation {
    // Déclarer une variable privée pour stocker la couleur du feu de 
    // circulation
    private $couleur;
    // Déclarer une variable privée pour stocker la durée du feu en 
    // secondes
    private $duree;

    // Constructeur pour la classe FeuDeCirculation
    public function __construct($couleur, $duree) {
        // Initialiser la couleur du feu de circulation
        $this->couleur = $couleur;
        // Initialiser la durée du feu de circulation
        $this->duree = $duree;
    }

    // Méthode pour changer la couleur du feu de circulation
    public function changerCouleur($newColor) {
        // Mettre à jour la variable couleur avec la nouvelle couleur
        $this->couleur = $newColor;
    }

    // Méthode pour vérifier si le feu est rouge
    public function estRouge() {
        // Retourne true si la couleur est rouge, sinon retourne 
        // false
        return $this->couleur === "Rouge";
    }

    // Méthode pour vérifier si le feu est vert
    public function estVert() {
        // Retourne true si la couleur est verte, sinon retourne 
        // false
        return $this->couleur === "Vert";
    }

    // Méthode pour obtenir la durée du feu de circulation
    public function getDuree() {
        // Renvoyer la valeur de la durée
        return $this->duree;
    }

    // Méthode pour définir la durée du feu de circulation
    public function setDuree($duree) {
        // Mettre à jour la variable durée avec la nouvelle valeur
        $this->duree = $duree;
    }
}

// Créer un nouvel objet FeuDeCirculation avec une couleur initiale 'Rouge' et une durée de 30 secondes
$fc = new FeuDeCirculation("Rouge", 30);

// Afficher si le feu est rouge
echo "Le feu est rouge: " . ($fc->estRouge() ? "Oui" : "Non") . "\n";

// Afficher si le feu est vert
echo "Le feu est vert: " . ($fc->estVert() ? "Oui" : "Non") . "\n";

// Changer la couleur du feu de circulation en 'Vert'
$fc->changerCouleur("Vert");

// Afficher si le feu de circulation est maintenant vert
echo "Le feu de circulation est maintenant vert: " . ($fc->estVert() ? "Oui" : "Non") . "\n";

// Afficher la durée du feu de circulation
echo "La durée du feu est: " . $fc->getDuree() . " secondes\n";

// Définir une nouvelle durée pour le feu de circulation à 15 secondes
$fc->setDuree(15);

// Afficher la durée actualisée du feu de circulation
echo "La durée du feu est maintenant: " . $fc->getDuree() . " secondes\n";
?>

Sortie:

Le feu est rouge: true
Le feu est vert: false
Le feu de circulation est maintenant vert: true
La durée du feu est: 30
La durée du feu est maintenant: 15
 

Exercice 2:

Écrire un programme PHP pour créer une classe appelée « Employee » avec un nom, un salaire, une date d’embauche et une méthode pour calculer les années de service.

Diagrame de classe:

Solution:

<?php
// Définir la classe Employee
class Employee {
    // Déclarer une variable privée pour stocker le nom de l'employé
    private $nom;
    // Déclarer une variable privée pour stocker le salaire de 
    // l'employé
    private $salaire;
    // Déclarer une variable privée pour stocker la date d'embauche 
    // de l'employé
    private $datEmbauche;

    // Constructeur pour la classe Employee
    public function __construct($nom, $salaire, $datEmbauche) {
        // Initialiser le nom de l'employé
        $this->nom = $nom;
        // Initialiser le salaire de l'employé
        $this->salaire = $salaire;
        // Initialiser la date d'embauche de l'employé (convertir en 
        // DateTime)
        $this->datEmbauche = new DateTime($datEmbauche);
    }

    // Méthode pour récupérer le nom de l'employé
    public function getNom() {
        // Renvoyer le nom de l'employé
        return $this->nom;
    }

    // Méthode pour définir le nom de l'employé
    public function setNom($nom) {
        // Mettre à jour la variable nom avec la nouvelle valeur
        $this->nom = $nom;
    }

    // Méthode pour récupérer le salaire de l'employé
    public function getSalaire() {
        // Renvoyer le salaire de l'employé
        return $this->salaire;
    }

    // Méthode pour définir le salaire de l'employé
    public function setSalaire($salaire) {
        // Mettre à jour la variable salaire avec la nouvelle valeur
        $this->salaire = $salaire;
    }

    // Méthode pour récupérer la date d'embauche de l'employé
    public function getDatEmbauche() {
        // Renvoyer la date d'embauche de l'employé
        return $this->datEmbauche->format('Y-m-d');
    }

    // Méthode pour définir la date d'embauche de l'employé
    public function setDatEmbauche($datEmbauche) {
        // Mettre à jour la variable datEmbauche avec la nouvelle 
        // valeur
        $this->datEmbauche = new DateTime($datEmbauche);
    }

    // Méthode de calcul des années de service de l'employé
    public function calculerAnneeService() {
        // Calculer la période entre la date d'embauche et la date du 
        // jour
        $aujourdHui = new DateTime();
        $interval = $this->datEmbauche->diff($aujourdHui);
        // Renvoyer le nombre d'années
        return $interval->y;
    }

    // Méthode pour afficher les détails de l'employé
    public function afficherEmployee() {
        // Afficher les détails de l'employé
        echo "\nNom: " . $this->nom . "\n";
        echo "Salaire: " . $this->salaire . "\n";
        echo "Date d'embauche: " . $this->datEmbauche->format('Y-m-d') . "\n";
    }
}


// Créer un nouvel objet Employee nommé emp1
$emp1 = new Employee("Alex Babtise", 80000, "2024-05-01");

// Créer un nouvel objet Employee nommé emp2
$emp2 = new Employee("Bob Kimo", 40000, "2022-03-01");

// Afficher les détails de l'employé 1
$emp1->afficherEmployee();

// Afficher les années de service de l'employé 1
echo "Années de service: " . $emp1->calculerAnneeService() . "\n";

// Afficher les détails de l'employé 2
$emp2->afficherEmployee();

// Afficher les années de service de l'employé 2
echo "Années de service: " . $emp2->calculerAnneeService() . "\n";
?>

Sortie:

Nom: Alex Babtise
Salaire: 80000.0
Date d'embauche: 2024-05-01
Années de service: 0

Nom: Bob Kimo
Salaire: 40000.0
Date d'embauche: 2022-03-01
Années de service: 2
 

Exercice 3:

Écrire un programme PHP pour créer une classe appelée « Etudiant » avec un nom, une note et des cours, ainsi que des méthodes pour ajouter et supprimer des cours.

Diagrame de classe:

Solution:

<?php
// Définir la classe Etudiant
class Etudiant {
    // Déclarer une variable privée pour stocker le nom de l'étudiant
    private $nom;
    // Déclarer une variable privée pour stocker la note de l'étud.
    private $note;
    // Déclarer un tableau privé pour stocker les cours de l'étudiant
    private $cours;

    // Constructeur pour la classe Etudiant
    public function __construct($nom, $note) {
        // Initialiser le nom de l'étudiant
        $this->nom = $nom;
        // Initialiser la note de l'étudiant
        $this->note = $note;
        // Initialiser le tableau de cours
        $this->cours = [];
    }

    // Méthode pour récupérer le nom de l'étudiant
    public function getNom() {
        return $this->nom;
    }

    // Méthode pour récupérer la note de l'étudiant
    public function getNote() {
        return $this->note;
    }

    // Méthode pour récupérer la liste de cours de l'étudiant
    public function getCours() {
        return $this->cours;
    }

    // Méthode pour ajouter un cours à la liste des cours de l'étud.
    public function ajouterCours($c) {
        // Ajouter le cours à la liste
        $this->cours[] = $c;
    }

    // Méthode pour supprimer un cours de la liste des cours de étud.
    public function supprimerCours($c) {
        // Chercher l'index du cours à supprimer
        $index = array_search($c, $this->cours);
        if ($index !== false) {
            // Supprimer le cours si trouvé
            unset($this->cours[$index]);
            // Réindexer le tableau après suppression
            $this->cours = array_values($this->cours);
        }
    }

    // Méthode pour afficher les détails de l'étudiant
    public function afficherEtudiant() {
        echo "Nom: " . $this->nom . "\n";
        echo "Note: " . $this->note . "\n";
    }
}

// Créer un nouvel objet Etudiant nommé e1
$e1 = new Etudiant("Alex Babtise", 18);

// Créer un nouvel objet Etudiant nommé e2
$e2 = new Etudiant("Bob Kimo", 16);

// Afficher les détails des étudiants
echo "Détails de l'étudiant:\n";
$e1->afficherEtudiant();
$e2->afficherEtudiant();

// Ajouter des cours pour l'étudiant 1
echo "Ajouter des cours pour " . $e1->getNom() . "\n";
$e1->ajouterCours("Mathématiques");
$e1->ajouterCours("Biologie");
$e1->ajouterCours("Histoire");

// Afficher les cours de l'étudiant 1
echo "Les cours de " . $e1->getNom() . " : " . implode(", ", $e1->getCours()) . "\n";

// Ajouter des cours pour l'étudiant 2
echo "\nAjouter des cours pour " . $e2->getNom() . "\n";
$e2->ajouterCours("Anglais");
$e2->ajouterCours("Géologie");
$e2->ajouterCours("Physique");

// Afficher les cours de l'étudiant 2
echo "Les cours de " . $e2->getNom() . " : " . implode(", ", $e2->getCours()) . "\n";

// Supprimer le cours 'Biologie' pour l'étudiant 1
echo "\nSuppression du cours 'Biologie' pour " . $e1->getNom() . "\n";
$e1->supprimerCours("Biologie");

// Afficher les cours mis à jour de l'étudiant 1
echo "Les cours de " . $e1->getNom() . " : " . implode(", ", $e1->getCours()) . "\n";
?>

Sortie:

Détails de l'étudiant:
Nom: Alex Babtise
Note: 18
Nom: Bob Kimo
Note: 16
Ajouter des cours pour Alex Babtise
Les cours de Alex Babtise : [Mathématiques, Biologie, Histoire]

Ajouter des cours pour Bob Kimo
Les cours de Bob Kimo : [Anglais, Géologie, Physique]

Suppression du cours 'Biologie' pour Alex Babtise
Les cours de Alex Babtise : [Mathématiques, Histoire]
 

Exercice 4:

Écrire un programme PHP pour créer une classe appelée « Bibliotheque » avec une collection de livres et des méthodes pour ajouter et supprimer des livres.

Diagrame de classe:

Solution:

<?php
// Définir la classe Livre
class Livre {
    // Attribut privé pour stocker le titre du livre
    private $titre;
    // Attribut privé pour stocker l'auteur du livre
    private $auteur;

    // Constructeur pour initialiser les champs titre et auteur
    public function __construct($titre, $auteur) {
        $this->titre = $titre;
        $this->auteur = $auteur;
    }

    // Méthode pour récupérer le titre
    public function getTitre() {
        return $this->titre;
    }

    // Méthode Setter pour le titre
    public function setTitre($titre) {
        $this->titre = $titre;
    }

    // Méthode pour récupérer l'auteur
    public function getAuteur() {
        return $this->auteur;
    }

    // Méthode Setter pour l'auteur
    public function setAuteur($auteur) {
        $this->auteur = $auteur;
    }
}

// Définir la classe Bibliotheque
class Bibliotheque {
    // Attribut privé pour stocker une liste d'objets Livres
    private $livres;

    // Constructeur pour initialiser la variable livres
    public function __construct() {
        $this->livres = [];
    }

    // Méthode pour ajouter un livre à la liste des livres
    public function addLivre($livre) {
        $this->livres[] = $livre;
    }

    // Méthode pour supprimer un livre de la liste des livres
    public function removeLivre($livre) {
        foreach ($this->livres as $key => $l) {
            if ($l->getTitre() == $livre->getTitre() && $l->getAuteur() == $livre->getAuteur()) {
                unset($this->livres[$key]);
                // Réindexer la liste après suppression
                $this->livres = array_values($this->livres); 
                break;
            }
        }
    }

    // Méthode pour récupérer la liste des livres
    public function getLivres() {
        return $this->livres;
    }
}


// Créer une nouvelle instance de la classe Bibliotheque
$biblio = new Bibliotheque();

// Créer de nouveaux objets Livre avec le titre et l'auteur
$livre1 = new Livre("Les Misérables", "Victor Hugo");
$livre2 = new Livre("Nana", "Émile Zola");
$livre3 = new Livre("Les fleurs du mal", "Baudelaire");
$livre4 = new Livre("Le Cid", "Corneille");

// Ajouter les livres à la biblio
$biblio->addLivre($livre1);
$biblio->addLivre($livre2);
$biblio->addLivre($livre3);
$biblio->addLivre($livre4);

echo "Livres dans la bibliothéque:\n";
// Parcourir la liste des livres de la biblio
foreach ($biblio->getLivres() as $livre) {
    // Afficher le titre et l'auteur de chaque livre
    echo $livre->getTitre() . " par " . $livre->getAuteur() . "\n";
}

// Supprimer un livre de la biblio
$biblio->removeLivre($livre2);
echo "\nLivres dans la biblio après suppression de '" . $livre2->getTitre() . "':\n";
// Parcourir la liste mise à jour des livres dans la biblio
foreach ($biblio->getLivres() as $livre) {
    // Afficher le titre et l'auteur de chaque livre
    echo $livre->getTitre() . " par " . $livre->getAuteur() . "\n";
}
?>

Sortie:

Livres dans la bibliothéque:
Les Misérables par Victor Hugo
Nana par Émile Zola
Les fleurs du mal par Baudelaire
Le Cid par Corneille

Livres dans la biblio après suppression Nana:
Les Misérables par Victor Hugo
Les fleurs du mal par Baudelaire
Le Cid par Corneille
 

Exercice 5:

Écrire un programme PHP pour créer une classe appelée « Avion » avec un numéro de vol, une destination et des attributs d’heure de départ, ainsi que des méthodes pour vérifier l’état et le retard du vol.

Diagrame de classe:

Solution:

<?php
// Définir la classe Avion
class Avion {
    // Attribut privé pour stocker le numéro de vol
    private $numVol;
    // Attribut privé pour stocker la destination
    private $destination;
    // Attribut privé pour stocker l'heure de départ prévue
    private $heureDepart;
    // Attribut privé pour stocker le temps de retard en minutes
    private $tempsRetard;

    // Constructeur pour initialiser le numéro de vol, la destination 
    // et l'heure de départ
    public function __construct($numVol, $destination, $heureDepart) {
        $this->numVol = $numVol;
        $this->destination = $destination;
        $this->heureDepart = new DateTime($heureDepart);
        $this->tempsRetard = 0;
    }

    // Méthode pour obtenir le numéro de vol
    public function getNumVol() {
        return $this->numVol;
    }

    // Méthode pour définir le numéro de vol
    public function setNumVol($numVol) {
        $this->numVol = $numVol;
    }

    // Méthode pour obtenir la destination
    public function getDestination() {
        return $this->destination;
    }

    // Méthode pour définir la destination
    public function setDestination($destination) {
        $this->destination = $destination;
    }

    // Méthode pour obtenir l'heure de départ
    public function getHeureDepart() {
        return $this->heureDepart->format('H:i');
    }

    // Méthode pour définir l'heure de départ
    public function setHeureDepart($heureDepart) {
        $this->heureDepart = new DateTime($heureDepart);
    }

    // Méthode pour obtenir le temps de retard
    public function getTempsRetard() {
        return $this->tempsRetard;
    }

    // Méthode pour fixer un délai et mettre à jour l'heure de départ
    public function retarder($minutes) {
        $this->tempsRetard = $minutes;
        $this->heureDepart->modify("+$minutes minutes");
    }

    // Méthode pour vérifier le statut du vol
    public function checkStatutVol() {
        if ($this->tempsRetard == 0) {
            echo "Le vol " . $this->numVol . " est à l'heure.\n";
        } else {
            echo "Le vol " . $this->numVol . " est retardé de " . $this->tempsRetard . " minutes. Nouvelle heure de départ : " . $this->getHeureDepart() . ".\n";
        }
    }
}

// Créer des objets Avion avec le numéro de vol, la destination et l'heure de départ
$a1 = new Avion("ABC123", "Paris", "11:30");
$a2 = new Avion("POM569", "CasaBlanca", "15:00");
$a3 = new Avion("UYT852", "Bruxelles", "12:00");

// Afficher le statut initial du vol
echo "Statut du vol:\n";
$a1->checkStatutVol();
$a2->checkStatutVol();
$a3->checkStatutVol();

// Retarder les vols
$a1->retarder(30);
$a2->retarder(90);

// Afficher l'état actuel des vols après les retards
echo "\nStatut actuel du vol:\n";
$a1->checkStatutVol();
$a2->checkStatutVol();
$a3->checkStatutVol();

?>

Sortie:

Statut du vol:
Le vol ABC123 est à l'heure.
Le vol POM569 est à l'heure.
Le vol UYT852 est à l'heure.

Statut actuel du vol:
Le vol ABC123 est retardé de 30 minutes.
Le vol POM569 est retardé de 90 minutes.
Le vol UYT852 est à l'heure.
 

Éditeur de code PHP: Testez votre code en ligne!

QCM sur PHP

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *