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

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 « Animal » avec des attributs tels que le nom, la race et l’âge. Créez des sous-classes « Chien » et « Oiseau » qui ajoutent des attributs spécifiques tels que le jouet préféré pour les chiens et la taille de l’aile pour les oiseaux. Implémentez des méthodes pour afficher les détails de l’animal et calculer son âge en années humaines.

Diagrame de classe:

Solution:

<?php
// Définir la classe Animal
class Animal {
    // Attributs de la classe Animal
    public $nom;
    public $race;
    public $age;

    // Constructeur pour la classe Animal
    public function __construct($nom, $race, $age) {
        $this->nom = $nom;
        $this->race = $race;
        $this->age = $age;
    }

    // Méthode d'affichage des détails de l'animal
    public function afficher() {
        echo "Nom: " . $this->nom . PHP_EOL;
        echo "Race: " . $this->race . PHP_EOL;
        echo "Age: " . $this->age . " années" . PHP_EOL;
    }

    // Méthode de calcul de l'âge de l'animal en années humaines
    public function calculerAge() {
        if ($this->race == "Chien") {
            return $this->age * 7;
        } else {
            // En supposant que l'âge de l'oiseau en années humaines 
            // est le même que l'âge réel
            return $this->age;
        }
    }
}

// Définir la classe Chien qui hérite de Animal
class Chien extends Animal {
    // Attribut supplémentaire pour la classe Chien
    public $jouet;

    // Constructeur pour la classe Chien
    public function __construct($nom, $age, $jouet) {
        // Appeler le constructeur de la classe mére
        parent::__construct($nom, "Chien", $age);
        $this->jouet = $jouet;
    }

    // Surcharger la méthode afficher pour inclure le jouet préféré
    public function afficher() {
        parent::afficher();
        echo "Le jouet préféré: " . $this->jouet . PHP_EOL;
    }
}

// Définir la classe Oiseau qui hérite de Animal
class Oiseau extends Animal {
    // Attribut supplémentaire pour la classe Oiseau
    public $tailleAile;

    // Constructeur pour la classe Oiseau
    public function __construct($nom, $age, $tailleAile) {
        // Appeler le constructeur de la classe mére
        parent::__construct($nom, "Oiseau", $age);
        $this->tailleAile = $tailleAile;
    }

    // Surcharger la méthode afficher pour inclure la taille de 
    // l'aile
    public function afficher() {
        parent::afficher();
        echo "La taille de l'aile: " . $this->tailleAile . " mètres" . PHP_EOL;
    }
}


// Créer une instance de Chien
$chien = new Chien("Beagle", 4, "Cordes");

// Créer une instance de Oiseau
$oiseau = new Oiseau("Calopsitte", 3, 1.5);

// Afficher les informations sur le chien
echo "Informations sur le chien:" . PHP_EOL;
$chien->afficher();
echo "Âge du chien en années humaines: " . $chien->calculerAge() . PHP_EOL;

// Afficher les informations sur l'oiseau
echo "\nInformations sur l'oiseau:" . PHP_EOL;
$oiseau->afficher();
echo "Âge de l'oiseau en années humaines: " . $oiseau->calculerAge() . PHP_EOL;

?>

Sortie:

Informations sur le chien:
Nom: Beagle
Race: Chien
Age: 4 années
Le jouet préféré: Cordes
Âge du chien en années humaines: 28

Informations sur l'oiseau:
Nom: Calopsitte
Race: Oiseau
Age: 3 années
La taille de l'aile: 1.5 mètres
Âge de l'oiseau en années humaines: 3
 

Exercice 2:

Écrire un programme PHP pour créer une classe appelée « AbonnementGym » avec des attributs pour le nom du membre, le type d’adhésion et la durée. Créer une sous-classe « AbonnementPremium » qui ajoute des attributs pour la disponibilité d’un entraîneur personnel et l’accès au spa. Implémentez des méthodes pour calculer les frais d’adhésion et vérifier s’il existe des offres spéciales basées sur le type d’adhésion.

Diagrame de classe:

Solution:

<?php
// Définir la classe AbonnementGym
class AbonnementGym {
    // Attributs pour AbonnementGym
    public $nom;
    public $type;
    public $duree; // en mois

    // Constructeur pour AbonnementGym
    public function __construct($nom, $type, $duree) {
        $this->nom = $nom;
        $this->type = $type;
        $this->duree = $duree;
    }

    // Méthode de calcul des frais d'adhésion
    public function calculerFrais() {
        $base = 50.0; // Frais de base par mois
        return $base * $this->duree;
    }

    // Méthode pour vérifier les offres spéciales
    public function checkOffresSpeciales() {
        if (strcasecmp($this->type, "annuelle") == 0) {
            return "10% réduction sur l'adhésion annuelle.";
        } else {
            return "Aucune offre spéciale n'est disponible.";
        }
    }

    // Méthode d'affichage des détails de l'abonnement
    public function afficher() {
        echo "Nom du membre: " . $this->nom . PHP_EOL;
        echo "Type d'abonnement: " . $this->type . PHP_EOL;
        echo "Durée: " . $this->duree . " mois" . PHP_EOL;
        echo "Frais d'abonnement: " . $this->calculerFrais() . " €" . PHP_EOL;
        echo "Offre spéciale: " . $this->checkOffresSpeciales() . PHP_EOL;
    }
}

// Définir la classe AbonnementPremium qui hérite de AbonnementGym
class AbonnementPremium extends AbonnementGym {
    // Attributs supplémentaires pour AbonnementPremium
    public $entraineurPersonnel;
    public $AccesSpa;

    // Constructeur pour AbonnementPremium
    public function __construct($nom, $type, $duree, $entraineurPersonnel, $AccesSpa) {
        parent::__construct($nom, $type, $duree);
        $this->entraineurPersonnel = $entraineurPersonnel;
        $this->AccesSpa = $AccesSpa;
    }

    // Surcharger la méthode calculerFrais pour inclure des coûts 
    // supplémentaires
    public function calculerFrais() {
        $base = parent::calculerFrais();
        $fraisSupplementaires = 0.0;

        if ($this->entraineurPersonnel) {
            // Frais supplémentaires par mois pour un entraîneur 
            // personnel
            $fraisSupplementaires += 30.0 * $this->duree;
        }
        if ($this->AccesSpa) {
            // Frais supplémentaires par mois pour l'accès au spa
            $fraisSupplementaires += 20.0 * $this->duree;
        }
        return $base + $fraisSupplementaires;
    }

    // Surcharger la méthode afficher pour inclure les détails de 
    // l'abonnement premium
    public function afficher() {
        parent::afficher();
        echo "Entraîneur personnel disponible: " . ($this->entraineurPersonnel ? "Oui" : "Non") . PHP_EOL;
        echo "Accès au spa: " . ($this->AccesSpa ? "Oui" : "Non") . PHP_EOL;
    }
}


// Créer une instance de AbonnementGym
$abonnementGym = new AbonnementGym("Alex Babto", "Mensuel", 5);

// Créer une instance de AbonnementPremium
$abonnementPremium = new AbonnementPremium("Emily Lyona", "Annuelle", 12, true, true);

// Afficher les détails de l'abonnement de base
echo "Détails de l'abonnement de base:" . PHP_EOL;
$abonnementGym->afficher();

// Afficher les détails de l'abonnement premium
echo "\nDétails de l'abonnement premium:" . PHP_EOL;
$abonnementPremium->afficher();

?>

Sortie:

Détails de l'abonnement de base:
Nom du membre: Alex Babto
Type d'abonnement: Mensuel
Durée: 5 months
Frais d'abonnement: 250.0 €
Offre spéciale: Aucune offre spéciale n'est disponible.

Détails de l'abonnement premium:
Nom du membre: Emily Lyona
Type d'abonnement: Annuelle
Durée: 12 months
Frais d'abonnement: 1200.0 €
Offre spéciale: 10% réduction sur l'adhésion annuelle.
Entraîneur personnel disponible: Oui
Accès au spa: Oui
 

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