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

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 « Personne » avec un nom et un attribut age. Créez deux instances de la classe « Personne », définissez leurs attributs à l’aide du constructeur et affichez leur nom et leur âge.

Exemple de sortie:

Alex Babtise a 25 ans.
Emily Tonari a 18 ans.

Diagrame de classe:

Solution:

<?php
// Définir la classe Person
class Person {
    // Déclarer une variable privée pour stocker le nom de la 
    // personne
    private $name;
    // Déclarer une variable privée pour stocker l'âge de la personne
    private $age;

    // Constructeur de la classe Person qui initialise
    // les variables name et age
    public function __construct($name, $age) {
        // Attribuer à la variable name la valeur du paramètre name
        $this->name = $name;
        // Attribuer à la variable age la valeur du paramètre age
        $this->age = $age;
    }

    // Méthode pour récupérer le nom de la personne
    public function getName() {
        // Retourner la valeur de la variable name
        return $this->name;
    }

    // Méthode pour récupérer l'âge de la personne
    public function getAge() {
        // Retourner la valeur de la variable age
        return $this->age;
    }

    // Méthode pour définir le nom de la personne
    public function setName($name) {
        // Attribuer à la variable name la valeur du paramètre name
        $this->name = $name;
    }

    // Méthode pour définir l'âge de la personne
    public function setAge($age) {
        // Attribuer à la variable age la valeur du paramètre age
        $this->age = $age;
    }
}

// Créer une instance de la classe Person avec le nom 'Alex Babtise' et l'âge de 25 ans
$p1 = new Person("Alex Babtise", 25);
// Créer une autre instance de la classe Person avec le nom 'Emily Tonari' et l'âge de 18 ans
$p2 = new Person("Emily Tonari", 18);

// Afficher le nom et l'âge de p1
echo $p1->getName() . " a " . $p1->getAge() . " ans.\n";
// Afficher le nom et l'âge de p2
echo $p2->getName() . " a " . $p2->getAge() . " ans.\n";

// Modifier le nom et l'âge de p2 en utilisant les méthodes setter
$p2->setName("Thomas Gozilla");
$p2->setAge(30);

// Afficher le nom et l'âge actualisés de p2
echo $p2->getName() . " a " . $p2->getAge() . " ans.\n";
?>

Sortie:

Alex Babtise a 25 ans.
Emily Tonari a 18 ans.

Thomas Gozilla a 30 ans.

Explication:

Dans l’exemple ci-dessus, nous créons deux instances de la classe « Personne », nous définissons leurs attributs à l’aide du constructeur et nous affichons leur nom et leur âge à l’aide des méthodes getter. Nous modifions également les attributs à l’aide des méthodes setter et affichons les valeurs mises à jour.

 

Exercice 2:

Écrivez un programme PHP pour créer une classe appelée « Chien » avec un nom et un attribut de race. Créez deux instances de la classe « Chien », définissez leurs attributs à l’aide du constructeur et modifiez les attributs à l’aide des méthodes setter, puis affichez les valeurs mises à jour.

Diagrame de classe:

Solution:

<?php
// Définir la classe Chien
class Chien {
    // Déclarer une variable privée pour stocker le nom du Chien
    private $nom;
    // Déclarer une variable privée pour stocker la race du Chien
    private $race;

    // Constructeur de la classe Chien qui initialise les variables 
    // nom et race
    public function __construct($nom, $race) {
        // Attribuer à la variable nom la valeur du paramètre nom
        $this->nom = $nom;
        // Attribuer à la variable race la valeur du paramètre race
        $this->race = $race;
    }

    // Méthode pour récupérer le nom du Chien
    public function getNom() {
        // Retourner la valeur de la variable nom
        return $this->nom;
    }

    // Méthode pour définir le nom du Chien
    public function setNom($nom) {
        // Attribuer à la variable nom la valeur du paramètre nom
        $this->nom = $nom;
    }

    // Méthode pour récupérer la race du Chien
    public function getRace() {
        // Retourner la valeur de la variable race
        return $this->race;
    }

    // Méthode pour définir la race du Chien
    public function setRace($race) {
        // Attribuer à la variable race la valeur du paramètre race
        $this->race = $race;
    }
}


// Créer une instance de la classe Chien avec le nom 'Rio' et la race 'Berger allemand'
$ch1 = new Chien("Rio", "Berger allemand");
// Créer une autre instance de la classe Chien avec le nom 'Rocky' et la race 'Husky'
$ch2 = new Chien("Rocky", "Husky");

// Afficher le nom et la race de ch1
echo $ch1->getNom() . " est un " . $ch1->getRace() . ".\n";
// Afficher le nom et la race de ch2
echo $ch2->getNom() . " est un " . $ch2->getRace() . ".\n";

// Afficher un message indiquant que la race de ch1 et le nom de ch2 vont être modifiés
echo "\nDéfinir la nouvelle race de ch1 et le nouveau nom de ch2:\n";
// Changer la race de ch1 en "Beagle"
$ch1->setRace("Beagle");
// Changer le nom de ch2 en "Simba"
$ch2->setNom("Simba");

// Afficher le nom et la race mis à jour de ch1
echo $ch1->getNom() . " est un " . $ch1->getRace() . ".\n";
// Afficher le nom et la race mis à jour de ch2
echo $ch2->getNom() . " est un " . $ch2->getRace() . ".\n";

?>

Sortie:

Rio est un Berger allemand
Rocky est un Husky

Définir la nouvelle race de ch1 et le nouveau nom de ch2:
Rio est un Beagle
Simba est un Husky
 

Exercice 3:

Écrire un programme PHP pour créer une classe appelée « Livre » avec des attributs pour le titre, l’auteur et l’ISBN, et des méthodes pour ajouter et supprimer des livres d’une collection.

Diagrame de classe:

Solution:

<?php
// Définir la classe Livre
class Livre {
    // Déclarer une variable privée pour stocker le titre du livre
    private $titre;
    // Déclarer une variable privée pour stocker l'auteur du livre
    private $auteur;
    // Déclarer une variable privée pour stocker l'ISBN du livre
    private $ISBN;
    // Déclarez un tableau statique pour stocker les livres
    private static $livres = []; 

    // Constructeur de la classe Livre qui initialise les variables 
    // titre, auteur et ISBN
    public function __construct($titre, $auteur, $ISBN) {
        // Attribuer à la variable 'titre' la valeur du paramètre 
        // 'titre' fourni
        $this->titre = $titre;
        // Attribuer à la variable 'auteur' la valeur du paramètre 
        // 'auteur' fourni
        $this->auteur = $auteur;
        // Attribuer à la variable 'ISBN' la valeur du paramètre 
        // 'ISBN' fourni
        $this->ISBN = $ISBN;
    }

    // Méthode pour récupérer le titre du livre
    public function getTitre() {
        // Renvoyer la valeur de la variable titre
        return $this->titre;
    }

    // Méthode pour définir le titre du livre
    public function setTitre($titre) {
        // Attribuer à la variable 'titre' la valeur du paramètre 
        // 'titre' fourni
        $this->titre = $titre;
    }

    // Méthode pour récupérer l'auteur du livre
    public function getAuteur() {
        // Renvoyer la valeur de la variable auteur
        return $this->auteur;
    }

    // Méthode pour définir l'auteur du livre
    public function setAuteur($auteur) {
        // Attribuer à la variable 'auteur' la valeur du paramètre 
        // 'auteur' fourni
        $this->auteur = $auteur;
    }

    // Méthode pour récupérer l'ISBN du livre
    public function getISBN() {
        // Renvoyer la valeur de la variable ISBN
        return $this->ISBN;
    }

    // Méthode pour définir l'ISBN du livre
    public function setISBN($ISBN) {
        // Attribuer à la variable 'ISBN' la valeur du paramètre 
        // 'ISBN' fourni
        $this->ISBN = $ISBN;
    }

    // Méthode statique pour ajouter un livre à la collection de 
    // livres
    public static function addLivre($livre) {
        // Ajouter l'objet livre fourni à la collection livres
        // Utilisation de self pour accéder à la variable statique
        self::$livres[] = $livre; 
    }

    // Méthode statique pour supprimer un livre de la collection de
    // livres
    public static function removeLivre($livre) {
        // Supprime l'objet livre fourni de la collection livres
        foreach (self::$livres as $key => $value) {
            if ($value === $livre) {
                // Retire le livre de la collection
                unset(self::$livres[$key]); 
            }
        }
    }

    // Méthode statique pour récupérer toute la collection de livres
    public static function getLivres() {
        // Retourner la liste de livres
        return self::$livres;
    }
}


// Créer une instance de la classe Livre avec titre "L'Étranger", auteur "Albert Camus", et ISBN "6547165001881"
$livre1 = new Livre("L'Étranger", "Albert Camus", "6547165001881");
// Créer une autre instance de la classe Livre avec titre "Le père Goriot", auteur "Honoré de Balzac", et ISBN "661100321741"
$livre2 = new Livre("Le père Goriot", "Honoré de Balzac", "661100321741");

// Ajouter livre1 à la collection de livres
Livre::addLivre($livre1);
// Ajouter livre2 à la collection de livres
Livre::addLivre($livre2);

// Récupérer la collection de livres et la stocker dans une variable nommée livres
$livres = Livre::getLivres();

// Afficher un en-tête pour la liste des livres
echo "Liste des livres:\n";

// Parcourir chaque livre de la collection livres
foreach ($livres as $l) {
	// Affichez le titre, l'auteur et le numéro ISBN de chaque livre
	echo $l->getTitre() . " par " . $l->getAuteur() . ", ISBN: " . $l->getISBN() . "\n";
}

// Supprimer le livre 1 de la collection de livres
Livre::removeLivre($livre1);

// Afficher un message indiquant que le livre 1 a été supprimé
echo "\nAprès suppression de " . $livre1->getTitre() . ":\n";

// Afficher un en-tête pour la liste des livres mise à jour
echo "Liste des livres mise à jour:\n";

// Récupérer la collection mise à jour de livres
$livres = Livre::getLivres();

// Parcourir chaque livre de la collection livres mise à jour
foreach ($livres as $l) {
	// Affichez le titre, l'auteur et le numéro ISBN de chaque livre
	echo $l->getTitre() . " par " . $l->getAuteur() . ", ISBN: " . $l->getISBN() . "\n";
}
?>

Sortie:

Liste des livres:
L'Étranger par Albert Camus, ISBN: 6547165001881
Le père Goriot par Honoré de Balzac, ISBN: 661100321741

Après suppression de L'Étranger:
Liste des livres mise à jour:
Le père Goriot par Honoré de Balzac, ISBN: 661100321741
 

Exercice 4:

Écrire un programme PHP pour créer une classe appelée « Employee » avec un nom, un poste et un salaire, ainsi que des méthodes pour calculer et mettre à jour le salaire.

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 poste de l'emp.
    private $poste;
    // Déclarer une variable privée pour stocker le salaire de l'emp
    private $salaire;

    // Constructeur de la classe Employee qui initialise les 
    // variables nom, poste et salaire
    public function __construct($nom, $poste, $salaire) {
        // Attribuer à la variable nom la valeur du paramètre nom
        $this->nom = $nom;
        // Attribuer à la variable poste la valeur du paramètre poste
        $this->poste = $poste;
        // Attribuer à la variable salaire la valeur du paramètre 
        // salaire fourni
        $this->salaire = $salaire;
    }

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

    // Méthode pour définir le nom de l'employé
    public function setNom($nom) {
        // Attribuer à la variable nom la valeur du paramètre nom
        $this->nom = $nom;
    }

    // Méthode pour récupérer le poste de l'employé
    public function getPoste() {
        // Retourner la valeur de la variable poste
        return $this->poste;
    }

    // Méthode pour définir le poste de l'employé
    public function setPoste($poste) {
        // Attribuer à la variable poste la valeur du paramètre poste
        $this->poste = $poste;
    }

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

    // Méthode pour définir le salaire de l'employé
    public function setSalaire($salaire) {
        // Attribuer à la variable salaire la valeur du paramètre 
        // salaire fourni
        $this->salaire = $salaire;
    }

    // Méthode pour augmenter le salaire de l'employé d'un 
    // pourcentage donné
    public function augSalaire($pourcentage) {
        // Calculer le nouveau salaire en augmentant le salaire 
        // actuel du pourcentage donné.
        $this->salaire += $this->salaire * $pourcentage / 100;
    }

    // Méthode pour afficher les détails de l'employé
    public function afficherEmployee() {
        // Afficher le nom de l'employé
        echo "Nom: " . $this->nom . "\n";
        // Afficher le poste de l'employé
        echo "Poste: " . $this->poste . "\n";
        // Afficher le salaire de l'employé
        echo "Salaire: " . $this->salaire . "\n";
    }
}

// Créer une instance de la classe Employee
$e1 = new Employee("Alex Babtise", "Développeur", 80000);
// Créer une autre instance de la classe Employee
$e2 = new Employee("Emily Firoza", "Comptable", 70000);

echo "\nDétails de l'employé:\n";
// Afficher les détails de e1
$e1->afficherEmployee();
// Afficher les détails de e2
$e2->afficherEmployee();

// Augmenter le salaire de e1 de 5%
$e1->augSalaire(5);
// Augmenter le salaire de e2 de 10%
$e2->augSalaire(10);

echo "\nAprès l'augmentation des salaires:\n";
echo "\n5% pour 'Alex Babtise':\n";
// Afficher les données mises à jour de e1
$e1->afficherEmployee();
echo "\n10% pour 'Emily Firoza':\n";
// Afficher les données mises à jour de e2
$e2->afficherEmployee();
	
?>

Sortie:

Détails de l'employé:
Nom: Alex Babtise
Poste: Développeur
Salaire: 80000.0
Nom: Emily Firoza
Poste: Comptable
Salaire: 70000.0

Après l'augmentation des salaires:

5% pour 'Alex Babtise':
Nom: Alex Babtise
Poste: Développeur
Salaire: 84000.0

10% pour 'Emily Firoza':
Nom: Emily Firoza
Poste: Comptable
Salaire: 77000.0
 

Exercice 5:

Écrivez un programme PHP pour créer une classe appelée « Banque » avec une collection de comptes et des méthodes pour ajouter et supprimer des comptes, et pour déposer et retirer de l’argent. Définissez également une classe appelée « Compte » pour gérer les détails du compte d’un client particulier.

Diagrame de classe:


Solution:

<?php
// Définir la classe Compte
class Compte {
    // Déclarer une variable privée pour stocker le nom du titulaire 
    // du compte
    private $nom;
    // Déclarer une variable privée pour stocker le numéro de compte
    private $numCompte;
    // Déclarer une variable privée pour stocker le solde du compte
    private $solde;

    // Constructeur de la classe Compte qui initialise les variables 
    // nom, numéro de compte et solde
    public function __construct($nom, $numCompte, $solde) {
        // Attribuer à la variable nom la valeur du paramètre $nom
        $this->nom = $nom;
        // Attribuer à la variable numCompte la valeur du paramètre 
        // $numCompte fourni
        $this->numCompte = $numCompte;
        // Attribuer à la variable solde la valeur du paramètre 
        // $solde fourni
        $this->solde = $solde;
    }

    // Méthode pour récupérer le nom du titulaire du compte
    public function getNom() {
        // Retourner la valeur de la variable nom
        return $this->nom;
    }

    // Méthode pour définir le nom du titulaire du compte
    public function setNom($nom) {
        // Attribuer à la variable nom la valeur du paramètre nom
        $this->nom = $nom;
    }

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

    // Méthode pour définir le numéro de compte
    public function setNumCompte($numCompte) {
        // Attribuer à la variable numCompte la valeur du paramètre 
        // numCompte fourni
        $this->numCompte = $numCompte;
    }

    // Méthode pour récupérer le solde du compte
    public function getSolde() {
        // Retourner la valeur de la variable solde
        return $this->solde;
    }

    // Méthode pour définir le solde du compte
    public function setSolde($solde) {
        // Attribuer à la variable solde la valeur du paramètre solde
        $this->solde = $solde;
    }

    // Méthode de dépôt d'un montant sur le compte
    public function deposer($montant) {
        // Augmenter le solde du montant spécifié
        $this->solde += $montant;
    }

    // Méthode de retrait d'un montant du compte
    public function retirer($montant) {
        // Réduire le solde du montant spécifié
        $this->solde -= $montant;
    }

    // Méthode pour récupérer les informations sur le compte
    public function getCompteInfo() {
        // Renvoyer une chaîne contenant le nom, le numéro de compte 
        // et le solde
        return "Nom: " . $this->nom . ", Numéro de compte: " . $this->numCompte . ", Solde: " . $this->solde;
    }
}

// Définir la classe Banque
class Banque {
    // Déclarer une ArrayList pour stocker les comptes
    private $comptes;

    // Constructeur de la classe Banque
    public function __construct() {
        // Initialiser la liste de comptes
        $this->comptes = array();
    }

    // Méthode pour ajouter un compte à la liste des comptes
    public function addCompte($compte) {
        // Ajouter le compte donné à la liste de comptes
        $this->comptes[] = $compte;
    }

    // Méthode pour supprimer un compte de la liste des comptes
    public function removeCompte($compte) {
        // Trouver l'index du compte à supprimer
        $index = array_search($compte, $this->comptes);
        if ($index !== false) {
            // Supprimer le compte donné de la liste de comptes
            unset($this->comptes[$index]);
            // Ré-indexer le tableau
            $this->comptes = array_values($this->comptes);
        }
    }

    // Méthode pour déposer de l'argent sur un compte spécifique
    public function deposerArgent($compte, $montant) {
        // Appeler la méthode de dépôt sur le compte donné avec le 
        // montant spécifié
        $compte->deposer($montant);
    }

    // Méthode pour retirer de l'argent d'un compte spécifique
    public function retirerArgent($compte, $montant) {
        // Appeler la méthode de retrait sur le compte donné avec le 
        // montant spécifié
        $compte->retirer($montant);
    }

    // Méthode pour obtenir la liste de tous les comptes
    public function getComptes() {
        // Retourner la liste des comptes
        return $this->comptes;
    }
}

// Créer un nouvel objet Banque
$b = new Banque();

// Créer trois nouveaux objets Compte avec les détails initiaux
$cpt1 = new Compte("Alex Babtise", "C101", 8000);
$cpt2 = new Compte("Ali Koris", "C102", 6500);
$cpt3 = new Compte("Bob Finor", "C103", 50000);

// Ajouter les trois comptes au Banque b
$b->addCompte($cpt1);
$b->addCompte($cpt2);
$b->addCompte($cpt3);

// Récupérer la liste des comptes de la Banque b
$comptes = $b->getComptes();

// Parcourir chaque compte de la liste des comptes
foreach ($comptes as $cpt) {
    // Afficher les informations relatives à chaque compte
    echo $cpt->getCompteInfo() . "\n";
}

// Afficher un message indiquant le début d'une opération de dépôt
echo "\nAprès avoir déposé 500 dans cpt1:\n";
// Déposer 500 dans cpt1
$b->deposerArgent($cpt1, 500);
// Afficher les informations de compte mises à jour pour cpt1
echo $cpt1->getCompteInfo() . "\n";

// Afficher un message indiquant qu'il n'y a pas de transaction pour cpt2
echo "Pas de transaction dans cpt2:\n";
// Afficher les informations relatives à cpt2
echo $cpt2->getCompteInfo() . "\n";

// Afficher un message indiquant le début d'une opération de retrait
echo "Après avoir retiré 2000 de cpt3:\n";
// Retirer 2000 de cpt3
$b->retirerArgent($cpt3, 2000);
// Afficher les informations de compte mises à jour pour cpt3
echo $cpt3->getCompteInfo() . "\n";

?>

Sortie:

Nom: Alex Babtise, Numéro de compte: C101, Solde: 8000.0
Nom: Ali Koris, Numéro de compte: C102, Solde: 6500.0
Nom: Bob Finor, Numéro de compte: C103, Solde: 50000.0

Après avoir déposé 500 dans cpt1:
Nom: Alex Babtise, Numéro de compte: C101, Solde: 8500.0
Pas de transaction dans cpt2:
Nom: Ali Koris, Numéro de compte: C102, Solde: 6500.0
Après avoir retiré 2000 de cpt3 :
Nom: Bob Finor, Numéro de compte: C103, Solde: 48000.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 *