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

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:

Écrire un programme PHP pour créer une classe appelée « Voyage » avec des méthodes permettant de rechercher des vols et des hôtels, ainsi que de réserver et d’annuler des réservations.

Diagrame de classe:

Solution:

<?php
// Définir la classe Voyage
class Voyage {
    // Déclarer un tableau pour stocker les vols
    private $vols;
    // Déclarer un tableau pour stocker les hôtels
    private $hotels;

    // Constructeur pour initialiser les tableaux
    public function __construct() {
        // Initialiser la liste des vols
        $this->vols = [];
        // Initialiser la liste des hôtels
        $this->hotels = [];
    }

    // Méthode pour rechercher des vols
    public function rechercherVols($orig, $dest, $date, $nbrVoyageur) {
        // Afficher les détails de la recherche de vols
        echo "Recherche de vols de $orig à $dest le $date pour $nbrVoyageur voyageurs.\n";
    }

    // Méthode pour rechercher des hôtels
    public function rechercherHotels($lieu, $dateArriv, $dateDepart, $nbrPers) {
        // Afficher les détails de la recherche d'hôtels
        echo "Recherche d'hôtels dans $lieu de $dateArriv à $dateDepart pour $nbrPers personnes.\n";
    }

    // Méthode pour réserver un vol
    public function reserverVol($numVol, $nomPassager, $orig, $dest, $date, $nbrVoyageur, $prix) {
        // Créer un objet vol avec les détails fournis
        $vol = new Vol($numVol, $nomPassager, $orig, $dest, $date, $nbrVoyageur, $prix);
        // Générer un numéro de confirmation
        $numConf = $this->generateConfirmationNumber();
        // Définir le numéro de confirmation du vol
        $vol->setNumConf($numConf);
        // Ajouter le vol à la liste des vols
        $this->vols[] = $vol;
        // Afficher le numéro de confirmation du vol réservé
        echo "Vol réservé ! Numéro de confirmation: $numConf\n";
    }

    // Méthode pour réserver un hôtel
    public function reserverHotel($hotelId, $nomPersonne, $lieu, $dateArriv, $dateDepart, $nbrPersonne, $prix) {
        // Créer un objet hotel avec les détails fournis
        $hotel = new Hotel($hotelId, $nomPersonne, $lieu, $dateArriv, $dateDepart, $nbrPersonne, $prix);
        // Générer un numéro de confirmation
        $numConf = $this->generateConfirmationNumber();
        // Définir le numéro de confirmation de l'hôtel
        $hotel->setNumConf($numConf);
        // Ajouter l'hôtel à la liste des hôtels
        $this->hotels[] = $hotel;
        // Afficher le numéro de confirmation de l'hôtel réservé
        echo "Hôtel réservé ! Numéro de confirmation: $numConf\n";
    }

    // Méthode pour annuler une réservation
    public function annulerReservation($numConf) {
        // Parcourir la liste des vols pour trouver la réservation
        foreach ($this->getVols() as $index => $vol) {
            // Si le numéro de confirmation correspond, supprimer la 
            // réservation de vol
            if ($vol->getNumConf() == $numConf) {
                unset($this->vols[$index]);
                // Afficher le message d'annulation du vol
                echo "Annulation de la réservation de vol avec le numéro de confirmation $numConf.\n";
                return;
            }
        }
        // Parcourir la liste des hôtels pour trouver la réservation
        foreach ($this->getHotels() as $index => $hotel) {
            // Si le numéro de confirmation correspond, supprimer la 
            // réservation d'hôtel
            if ($hotel->getNumConf() == $numConf) {
                unset($this->hotels[$index]);
                // Afficher le message d'annulation d'hôtel
                echo "Annulation de la réservation d'hôtel avec le numéro de confirmation $numConf.\n";
                return;
            }
        }
        // Afficher un message si aucune réservation n'a été trouvée 
        // avec le numéro de confirmation fourni
        echo "Aucune réservation n'a été trouvée avec le numéro de confirmation $numConf.\n";
    }

    // Méthode pour générer un numéro de confirmation aléatoire à 6 
    // chiffres
    private function generateConfirmationNumber() {
        // Générer et renvoyer un nombre aléatoire à 6 chiffres
        return rand(100000, 999999);
    }

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

    // Méthode pour récupérer la liste des hôtels
    public function getHotels() {
        // Retourner la liste des hôtels
        return $this->hotels;
    }
}

// Définir la classe Vol
class Vol {
    // Déclarer une variable entière pour stocker le numéro de vol
    private $numVol;
    // Déclarer une variable pour stocker le nom du passager
    private $nomPassager;
    // Déclarer une variable pour stocker l'origine du vol
    private $origin;
    // Déclarer une variable pour stocker la destination du vol
    private $destination;
    // Déclarer une variable pour stocker la date du vol
    private $date;
    // Déclarer une variable pour stocker le nombre de passagers
    private $nbrPassagers;
    // Déclarer une variable double pour stocker le prix du vol
    private $prix;
    // Déclarer une variable pour stocker le numéro de confirmation
    private $numConf;

    // Constructeur pour initialiser l'objet Vol avec les détails 
    // fournis
    public function __construct($numVol, $nomPassager, $origin, $destination, $date, $nbrPassagers, $prix) {
        // Initialiser le numéro de vol
        $this->numVol = $numVol;
        // Initialiser le nom du passager
        $this->nomPassager = $nomPassager;
        // Initialiser l'origine du vol
        $this->origin = $origin;
        // Initialiser la destination du vol
        $this->destination = $destination;
        // Initialiser la date du vol
        $this->date = $date;
        // Initialiser le nombre de passagers
        $this->nbrPassagers = $nbrPassagers;
        // Initialiser le prix du vol
        $this->prix = $prix;
    }

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

    // Méthode pour récupérer le nom du passager
    public function getNomPassager() {
        return $this->nomPassager;
    }

    // Méthode pour récupérer l'origine du vol
    public function getOrigin() {
        return $this->origin;
    }

    // Méthode pour récupérer la destination du vol
    public function getDestination() {
        return $this->destination;
    }

    // Méthode pour récupérer la date du vol
    public function getDate() {
        return $this->date;
    }

    // Méthode pour récupérer le nombre de passagers
    public function getNbrPassagers() {
        return $this->nbrPassagers;
    }

    // Méthode pour récupérer le prix du vol
    public function getPrix() {
        return $this->prix;
    }

    // Méthode pour récupérer le numéro de confirmation
    public function getNumConf() {
        return $this->numConf;
    }

    // Méthode pour définir le numéro de confirmation
    public function setNumConf($numConf) {
        $this->numConf = $numConf;
    }
}


// Définir la classe Hotel
class Hotel {
    // Déclarer une variable pour stocker l'identifiant de l'hôtel
    private $hotelId;
    // Déclarer une variable pour stocker le nom de l'invité
    private $nomPersonne;
    // Déclarer une variable pour stocker la localisation de l'hôtel
    private $lieu;
    // Déclarer une variable pour stocker la date d'enregistrement
    private $dateArriv;
    // Déclarez une variable pour stocker la date de sortie
    private $dateDepart;
    // Déclarer une variable entière pour stocker le nombre d'invités
    private $nbrPersonne;
    // Déclarer une variable double pour stocker le prix du séjour
    private $prix;
    // Déclarer une variable pour stocker le numéro de confirmation
    private $numConf;

    // Constructeur pour initialiser l'objet Hôtel avec les détails 
    // fournis
    public function __construct($hotelId, $nomPersonne, $lieu, $dateArriv, $dateDepart, $nbrPersonne, $prix) {
        // Initialiser l'identifiant de l'hôtel
        $this->hotelId = $hotelId;
        // Initialiser le nom de l'invité
        $this->nomPersonne = $nomPersonne;
        // Initialiser la localisation de l'hôtel
        $this->lieu = $lieu;
        // Initialiser la date d'enregistrement
        $this->dateArriv = $dateArriv;
        // Initialiser la date de sortie
        $this->dateDepart = $dateDepart;
        // Initialiser le nombre d'invités
        $this->nbrPersonne = $nbrPersonne;
        // Initialiser le prix du séjour
        $this->prix = $prix;
    }

    // Méthode pour récupérer l'identifiant de l'hôtel
    public function getHotelId() {
        return $this->hotelId;
    }

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

    // Méthode pour récupérer la localisation de l'hôtel
    public function getLieu() {
        return $this->lieu;
    }

    // Méthode pour récupérer la date d'enregistrement
    public function getDateArriv() {
        return $this->dateArriv;
    }

    // Méthode pour récupérer la date de sortie
    public function getDateDepart() {
        return $this->dateDepart;
    }

    // Méthode pour récupérer le prix du séjour
    public function getPrix() {
        return $this->prix;
    }

    // Méthode pour récupérer le nombre d'invités
    public function getNbrPersonne() {
        return $this->nbrPersonne;
    }

    // Méthode pour récupérer le numéro de confirmation
    public function getNumConf() {
        return $this->numConf;
    }

    // Méthode pour définir le numéro de confirmation
    public function setNumConf($numConf) {
        $this->numConf = $numConf;
    }
}

// Créer un nouvel objet Voyage
$app = new Voyage();

// Recherche de vols de Paris à Casablanca le 2024-02-01 pour 1 passager
$app->rechercherVols("Paris", "Casablanca", "2024-02-01", 1);

// Recherche des hôtels à Casablanca du 2024-09-01 au 2024-10-05 pour 2 personnes
$app->rechercherHotels("Casablanca", "2024-09-01", "2024-10-05", 2);

// Réservez un vol avec le numéro de vol 96342588 pour Alex Babtise de Paris à Casablanca le 2024-08-01 pour 1 passager avec un prix de 600.00€
$app->reserverVol(96342588, "Alex Babtise", "Paris", "Casablanca", "2024-08-01", 1, 600.00);

// Réservez un vol avec le numéro de vol 10843563 pour Emily Lyona de Paris à Casablanca le 2024-08-01 pour 1 passager avec un prix de 755.00€
$app->reserverVol(10843563, "Emily Lyona", "Paris", "Casablanca", "2024-08-01", 1, 755.00);

// Réservez un hôtel avec ID 98765432 pour Martin Nadine à Casablanca du 2024-09-01 au 2024-09-05 pour 1 personne avec un prix de 150.00€
$app->reserverHotel(98765432, "Martin Nadine", "Casablanca", "2024-09-01", "2024-09-05", 1, 150.00);

// Annuler la réservation avec le numéro de confirmation 90945840
$app->annulerReservation(90945840);		
?>

Sortie:

Recherche de vols de Paris à Casablanca le 2024-02-01 pour 1 voyageurs.
Recherche d'hôtels dans Casablanca de 2024-09-01 à 2024-10-05 pour 2 personnes.
Vol réservé ! Numéro de confirmation: 100881
Vol réservé ! Numéro de confirmation: 455285
Hôtel réservé ! Numéro de confirmation: 799037
Aucune réservation n'a été trouvée avec le numéro de confirmation 90945840.
 

Exercice 2:

Écrivez un programme PHP pour créer une classe appelée « Restaurant » avec des attributs pour les plats du menu, les prix et les notes, et des méthodes pour ajouter et supprimer des plats, et pour calculer la note moyenne.

Diagrame de classe:

Solution:

<?php
// Définir la classe Restaurant
class Restaurant {
    // Déclarez des tableaux pour stocker les plats du menu, les 
    // prix, les notes et le nombre de plats.
    private $menu;
    private $prix;
    private $notes;
    private $nbrDePlats;

    // Constructeur pour initialiser les tableaux
    public function __construct() {
        // Initialiser le tableau menu
        $this->menu = [];
        // Initialiser le tableau de prix
        $this->prix = [];
        // Initialiser le tableau de notes
        $this->notes = [];
        // Initialiser le tableau de nbrDePlats
        $this->nbrDePlats = [];
    }

    // Méthode pour ajouter un plat au menu
    public function addPlat($elem, $prix_p) {
        // Ajouter le plat au menu
        $this->menu[] = $elem;
        // Ajouter le prix à la liste de prix
        $this->prix[] = $prix_p;
        // Initialiser la note du plat à 0
        $this->notes[] = 0;
        // Initialiser le compteur du plat à 0
        $this->nbrDePlats[] = 0;
    }

    // Méthode pour supprimer un plat du menu
    public function removePlat($plat) {
        // Obtenir l'index du plat dans le tableau menu
        $index = array_search($plat, $this->menu);
        // Si le plat existe dans le menu
        if ($index !== false) {
            // Supprimer le plat du menu
            unset($this->menu[$index]);
            // Retirer le prix correspondant de la liste de prix
            unset($this->prix[$index]);
            // Retirer la note correspondante de la liste de notes
            unset($this->notes[$index]);
            // Supprimer le nombre de plats correspondant de la liste 
            // nbrDePlats
            unset($this->nbrDePlats[$index]);
        }
    }

    // Méthode pour ajouter une note à un plat
    public function addNote($plat, $note) {
        // Obtenir l'index du plat dans le menu
        $index = array_search($plat, $this->menu);
        // Si le plat existe dans le menu
        if ($index !== false) {
            // Obtenir la note actuelle du plat
            $note_act = $this->notes[$index];
            // Obtenir le nombre actuel du plat
            $totalePlats = $this->nbrDePlats[$index];
            // Mettre à jour la note du plat
            $this->notes[$index] = $note_act + $note;
            // Mettre à jour le nombre de plats
            $this->nbrDePlats[$index] = $totalePlats + 1;
        }
    }

    // Méthode pour obtenir la note moyenne d'un plat
    public function getMoyenneNote($plat) {
        // Obtenir l'index du plat dans le menu
        $index = array_search($plat, $this->menu);
        // Si le plat existe dans le menu
        if ($index !== false) {
            // Obtenir la note totale du plat
            $totaleNote = $this->notes[$index];
            // Obtenir le nombre actuel du plat
            $totalePlats = $this->nbrDePlats[$index];
            // Calculer et renvoyer la note moyenne du plat
            return $totalePlats > 0 ? $totaleNote / $totalePlats : 0.0;
        } else {
            // Retourne 0.0 si le plat n'existe pas dans le menu
            return 0.0;
        }
    }

    // Méthode pour afficher le menu
    public function afficherMenu() {
        // Parcourir la liste de menus
        for ($i = 0; $i < count($this->menu); $i++) {
            // Afficher le plat et son prix
            echo $this->menu[$i] . ": €" . $this->prix[$i] . "\n";
        }
    }

    // Méthode de calcul de la note moyenne de tous les plats
    public function calculerNoteMoyenne() {
        // Initialiser la note totale à 0
        $noteTotale = 0;
        // Initialiser le nombre de notes à 0
        $nbrNote = 0;
        // Parcourir la liste de notes
        for ($i = 0; $i < count($this->notes); $i++) {
            // Ajouter la note à noteTotale
            $noteTotale += $this->notes[$i];
            // Incrémenter nbrNote
            $nbrNote++;
        }
        // Calculer et renvoyer la note moyenne
        return $nbrNote > 0 ? $noteTotale / $nbrNote : 0.0;
    }
}


// Créer un nouvel objet Restaurant
$restaurant = new Restaurant();
// Ajouter au menu un plat Bœuf à la ficelle au prix de 15€
$restaurant->addPlat("Bœuf à la ficelle", 15.00);
// Ajouter au menu un plat de pizzas au prix de 8,99€
$restaurant->addPlat("Pizza", 8.99);
// Ajouter un plat de salade au prix de 5€ au menu
$restaurant->addPlat("Salade", 5.00);

echo "Menu: Plats et prix\n";
// Afficher les plats du menu et leur prix
$restaurant->afficherMenu();

// Ajouter une note de 4 au plat Bœuf à la ficelle
$restaurant->addNote("Bœuf à la ficelle", 4);
// Ajouter une note de 5 au plat Bœuf à la ficelle
$restaurant->addNote("Bœuf à la ficelle", 5);
// Ajouter une note de 3 au plat Pizza
$restaurant->addNote("Pizza", 3);
// Ajouter une note de 4 au plat Pizza
$restaurant->addNote("Pizza", 4);
// Ajouter une note de 2 au plat de salade
$restaurant->addNote("Salade", 2);

// Obtenir la note moyenne pour le plat Pizza
$noteMoyenne = $restaurant->getMoyenneNote("Pizza");
// Afficher la note moyenne pour le plat Pizza
echo "Note moyenne pour Pizza: " . $noteMoyenne . "\n";
// Obtenir la note moyenne pour le plat Salade
$noteMoyenne = $restaurant->getMoyenneNote("Salade");
// Afficher la note moyenne pour le plat Salade
echo "Note moyenne pour Salade: " . $noteMoyenne . "\n";
// Afficher la note moyenne totale pour tous les plats
echo "Note moyenne: " . $restaurant->calculerNoteMoyenne() . "\n";

echo "\nSupprimer 'Pizza' du menu.\n";
// Supprimer le plat pizza du menu
$restaurant->removePlat("Pizza");
echo "\nMenu actualisé:\n";
// Afficher les plats du menu mis à jour et leur prix
$restaurant->afficherMenu();

?>

Sortie:

Menu: Plats et prix
Bœuf à la ficelle: 15.00€
Pizza: 8,99€
Salade: 5.0€
Note moyenne pour Pizza: 3.5
Note moyenne pour Salad: 2
Note moyenne: 3.56987155
Supprimer 'Pizza' du menu.

Menu actualisé:
Bœuf à la ficelle: 15.00€
Salade: 5.0€
 

Exercice 3:

Écrivez un programme PHP pour créer une classe appelée « CompteBancaire » avec des attributs pour le numéro de compte, le nom du titulaire du compte et le solde. Incluez des méthodes pour déposer et retirer de l’argent, ainsi que pour vérifier le solde. Créez une classe fils appelée « CompteEpargne » qui ajoute un attribut de taux d’intérêt et une méthode pour appliquer l’intérêt.

Diagrame de classe:

Solution:

<?php
// Définir la classe CompteBancaire
class CompteBancaire {
    // Attribut pour le numéro de compte
    private $numCompte;

    // Attribut pour le nom du titulaire du compte
    private $titulaireCompte;

    // Attribut pour le solde du compte
    private $solde;

    // Constructeur pour initialiser l'objet CompteBancaire
    public function __construct($numCompte, $titulaireCompte, $soldeInitial) {
        $this->numCompte = $numCompte;
        $this->titulaireCompte = $titulaireCompte;
        $this->solde = $soldeInitial;
    }

    // Méthode pour déposer de l'argent sur le compte
    public function deposer($montant) {
        if ($montant > 0) {
            $this->solde += $montant;
            echo "Déposés: " . $montant . ". Nouveau solde: " . $this->solde . "\n";
        } else {
            echo "Le montant déposé doit être positif.\n";
        }
    }

    // Méthode pour retirer de l'argent du compte
    public function retirer($montant) {
        if ($montant > 0 && $montant <= $this->solde) {
            $this->solde -= $montant;
            echo "Retrait: " . $montant . ". Nouveau solde: " . $this->solde . "\n";
        } else {
            echo "Solde insuffisant ou montant invalide.\n";
        }
    }

    // Méthode pour vérifier le solde du compte
    public function checkSolde() {
        return $this->solde;
    }

    // Méthode pour récupérer le numéro de compte
    public function getNumCompte() {
        return $this->numCompte;
    }

    // Méthode pour récupérer le nom du titulaire du compte
    public function getTitulaireCompte() {
        return $this->titulaireCompte;
    }
}

// Définir la classe CompteEpargne qui hérite de CompteBancaire
class CompteEpargne extends CompteBancaire {
    // Attribut pour le taux d'intérêt
    private $tauxInter;

    // Constructeur pour initialiser l'objet CompteEpargne
    public function __construct($numCompte, $titulaireCompte, $soldeInitial, $tauxInter) {
        // Appeler le constructeur de la classe mère
        parent::__construct($numCompte, $titulaireCompte, $soldeInitial);

        $this->tauxInter = $tauxInter;
    }

    // Méthode pour appliquer l'intérêt au solde
    public function appliquerInter() {
        // Calculer l'intérêt
        $inter = $this->checkSolde() * $this->tauxInter / 100;

        // Ajouter de l'intérêt au solde
        $this->deposer($inter); 
        echo "Intérêts appliqués: " . $inter . ". Nouveau solde: " . $this->checkSolde() . "\n";
    }

    // Méthode Getter pour le taux d'intérêt
    public function getTauxInter() {
        return $this->tauxInter;
    }

    // Méthode Setter pour le taux d'intérêt
    public function setTauxInter($tauxInter) {
        if ($tauxInter > 0) {
            $this->tauxInter = $tauxInter;
        } else {
            echo "Le taux d'intérêt doit être positif.\n";
        }
    }
}


// Créer un objet CompteBancaire
$cpt = new CompteBancaire("902456001", "Alex Babtise", 1500.0);
// Vérifier le solde
echo "Solde actuel: " . $cpt->checkSolde() . "\n";

$cpt->deposer(4000.0); // Déposer de l'argent
$cpt->retirer(3000.0); // Retirer de l'argent
// Vérifier le solde
echo "Solde actuel: " . $cpt->checkSolde() . "\n";

// Créer un objet CompteEpargne
$epargne = new CompteEpargne("555236123", "Emily Leona", 3000.0, 5.0);
// Appliquer l'intérêt
$epargne->appliquerInter();

// Vérifier le solde
echo "Compte d'épargne solde: " . $epargne->checkSolde() . "\n";

?>

Sortie:

Solde actuel: 1500.0
Déposés: 4000.0. Nouveau solde: 5500.0
Retrait: 3000.0. Nouveau solde: 2500.0
Solde actuel: 2500.0
Déposés: 150.0. Nouveau solde: 3150.0
Intérêts appliqués: 150.0. Nouveau solde: 3150.0
Compte d'épargne solde: 3150.0
 

Exercice 4:

Écrire un programme PHP pour créer une classe appelée « Vehicule » avec des attributs pour la marque, le modèle et l’année. Créez des classes fils « Voiture » et « Camion » qui ajoutent des attributs spécifiques tels que la taille du coffre pour les voitures et la capacité de charge pour les camions. Implémentez une méthode pour afficher les détails du véhicule dans chaque classe fille.

Diagrame de classe:

Solution:

<?php
// Définir la classe Vehicule
class Vehicule {
    // Attribut pour la marque du véhicule
    private $marque;

    // Attribut pour le modèle du véhicule
    private $model;

    // Attribut pour l'année du véhicule
    private $an;

    // Constructeur pour initialiser l'objet Vehicule
    public function __construct($marque, $model, $an) {
        $this->marque = $marque;
        $this->model = $model;
        $this->an = $an;
    }

    // Méthode pour afficher les détails du véhicule
    public function afficherDetails() {
        echo "Les détails du véhicule:\n";
        echo "Marque: " . $this->marque . "\n";
        echo "Modèle: " . $this->model . "\n";
        echo "Année: " . $this->an . "\n";
    }

    // Méthode Getter pour la marque du véhicule
    public function getMarque() {
        return $this->marque;
    }

    // Méthode Getter pour le modèle du véhicule
    public function getModel() {
        return $this->model;
    }

    // Méthode Getter pour l'année du véhicule
    public function getAn() {
        return $this->an;
    }
}

// Définir la classe fille Voiture qui hérite de Vehicule
class Voiture extends Vehicule {
    // Attribut pour la taille du coffre de la voiture
    private $tailleCoffre;

    // Constructeur pour initialiser l'objet Voiture
    public function __construct($marque, $model, $an, $tailleCoffre) {
        // Appeler le constructeur de la classe mère
        parent::__construct($marque, $model, $an);
        $this->tailleCoffre = $tailleCoffre;
    }

    // Surcharger la méthode afficherDetails pour inclure la taille du coffre
    public function afficherDetails() {
        // Appeler la méthode de la classe mère
        parent::afficherDetails();
        echo "Taille du coffre: " . $this->tailleCoffre . " mètres cubes\n";
    }

    // Méthode pour récupérer la taille du coffre
    public function getTailleCoffre() {
        return $this->tailleCoffre;
    }

    // Méthode pour définir la taille du coffre
    public function setTailleCoffre($tailleCoffre) {
        if ($tailleCoffre > 0) {
            $this->tailleCoffre = $tailleCoffre;
        } else {
            echo "La taille du coffre doit être positive.\n";
        }
    }
}

// Définir la classe fille Camion qui hérite de Vehicule
class Camion extends Vehicule {
    // Attribut pour la capacité de charge du camion
    private $capacitCharge;

    // Constructeur pour initialiser l'objet Camion
    public function __construct($marque, $model, $an, $capacitCharge) {
        // Appeler le constructeur de la classe mère
        parent::__construct($marque, $model, $an);
        $this->capacitCharge = $capacitCharge;
    }

    // Surcharger la méthode afficherDetails pour inclure la capacité 
    // de charge
    public function afficherDetails() {
        // Appeler la méthode de la classe mère
        parent::afficherDetails();
        echo "Capacité de charge: " . $this->capacitCharge . " tons\n";
    }

    // Méthode pour récupérer la capacité de charge
    public function getCapacitCharge() {
        return $this->capacitCharge;
    }

    // Méthode pour définir la capacité de charge
    public function setCapacitCharge($capacitCharge) {
        if ($capacitCharge > 0) {
            $this->capacitCharge = $capacitCharge;
        } else {
            echo "La capacité de charge doit être positive.\n";
        }
    }
}


// Créer un objet Voiture
$v = new Voiture("BMW", "Série 6", 2014, 16.15);
// Afficher les détails de la voiture
$v->afficherDetails(); 

// Créer un objet Camion
$c = new Camion("Mercedes", "Arocs", 2024, 4.5);
// Afficher les détails du camion
$c->afficherDetails(); 
?>

Sortie:

Les détails du véhicule:
Marque: BMW
Modèle: Série 6
Année: 2014
Taille du coffre: 16.15 mètres cubes
Les détails du véhicule:
Marque: Mercedes
Modèle: Arocs
Année: 2024
Capacité de charge: 4.5 tons
 

Exercice 5:

Écrire un programme PHP pour créer une classe appelée « Client » avec des attributs pour le nom, l’email et l’historique des achats. Implémentez des méthodes pour ajouter des achats à l’historique et calculer la dépense totale. Créez une classe fille « ClientFidele » qui ajoute un attribut de taux de remise et une méthode pour appliquer la remise.

Diagrame de classe:

Solution:

<?php
// Définir la classe Client
class Client {
    // Attributs pour le nom, l'email et l'historique des achats du 
    // client
    private $nom;
    private $email;
    private $historiqueAchats;

    // Constructeur pour initialiser le nom et l'email du client
    public function __construct($nom, $email) {
        $this->nom = $nom;
        $this->email = $email;
        // Initialiser l'historique des achats comme une liste vide
        $this->historiqueAchats = [];
    }

    // Méthode pour ajouter un achat à l'historique des achats
    public function addAchat($montant) {
        // Ajouter le montant à l'historique
        $this->historiqueAchats[] = $montant; 
    }

    // Méthode de calcul des dépenses totales
    public function calculerTotalDepenses() {
        $total = 0;
        // Parcourir chaque achat et faire la somme des montants
        foreach ($this->historiqueAchats as $purchase) {
            $total += $purchase;
        }
        return $total;
    }

    // Getters pour l'attribut nom
    public function getNom() {
        return $this->nom;
    }

    // Getters pour l'attribut email
    public function getEmail() {
        return $this->email;
    }

    // Méthode pour récupérer l'historique des achats
    public function getHistoriqueAchats() {
        return $this->historiqueAchats;
    }
}

// Définir la classe fille ClientFidele qui hérite de la classe Client
class ClientFidele extends Client {
    // Attribut pour le taux de remise
    private $tauxRemise;

    // Constructeur pour initialiser ClientFidele avec le nom, 
    // l'email et le taux de réduction
    public function __construct($nom, $email, $tauxRemise) {
        // Appeler le constructeur de la classe mère
        parent::__construct($nom, $email);
        $this->tauxRemise = $tauxRemise;
    }

    // Méthode pour appliquer la réduction à un montant donné
    public function appliquerRemise($montant) {
        return $montant - ($montant * $this->tauxRemise / 100);
    }

    // Surcharger la méthode addAchat pour appliquer la réduction 
    // avant d'ajouter l'achat
    public function addAchat($montant) {
        $montantReduit = $this->appliquerRemise($montant);
        // Appeler la méthode de la classe mère pour ajouter le 
        // montant réduit
        parent::addAchat($montantReduit);
    }

    // Méthode pour récupérer le taux de remise
    public function getTauxRemise() {
        return $this->tauxRemise;
    }

    // Méthode pour définir le taux de remise
    public function setTauxRemise($tauxRemise) {
        $this->tauxRemise = $tauxRemise;
    }
}

// Créer un client régulier
$c = new Client("Alex Rio", "[email protected]");
$c->addAchat(200);
$c->addAchat(300);
echo "Dépenses totales pour " . $c->getNom() . ": " . $c->calculerTotalDepenses() . "\n";

// Créer un client fidèle avec un taux de réduction de 5%
$f = new ClientFidele("Emily Bazi", "[email protected]", 5);
$f->addAchat(200);
$f->addAchat(300);
echo "Dépenses totales pour " . $f->getNom() . " après réduction: " . $f->calculerTotalDepenses() . "\n";

?>

Sortie:

Dépenses totales pour Alex Rio: 500.0
Dépenses totales pourr Emily Bazi après réduction: 475.0
 

É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 *