Live Coding : PHP Orienté Objet - Injection de dépendance

25 mai 2020 - : PHP Tutoriel Live-Coding - : 0 commentaire - Tutoriel PHP Live-Coding Orienté Objet

Visualisez les fichiers de cette série sur GitHub

Dernière modification le 27 mai 2020

Dans la partie précédente nous avons créé une classe "Compte" pour notre client.

Nous allons modifier notre code pour qu'un client soit attribué directement à la création d'un compte bancaire.

Ainsi, le constructeur de notre compte bancaire, qu'il soit un compte courant ou d'épargne, demandera non plus une chaîne de caractères comme titulaire mais un objet de type Compte Client.

C'est ce qu'on appelle une injection de dépendance, la classe Compte (bancaire) sera dépendante de la classe Compte (client) étant donné que cette dernière sera injectée dans le constructeur de la 1ère.

Le compte client

Nous allons donc créer la classe "Compte" (Client) comme ceci

<?php
namespace App\Client;

/**
 * Compte du client
 */
class Compte
{
    /**
     * Nom du client
     * @var string
     */
    private $nom;

    /**
     * Prénom du client
     * @var string
     */
    private $prenom;

    /**
     * Constructeur du compte client
     * @param string $nom Nom du client
     * @param string $prenom Prénom du client
     * @return void 
     */
    public function __construct(string $nom, string $prenom)
    {
        $this->nom = $nom;
        $this->prenom = $prenom;
    }

    /**
     * Get nom du client
     *
     * @return  string
     */ 
    public function getNom()
    {
        return $this->nom;
    }

    /**
     * Set nom du client
     *
     * @param  string  $nom  Nom du client
     *
     * @return  self
     */ 
    public function setNom(string $nom)
    {
        $this->nom = $nom;

        return $this;
    }

    /**
     * Get prénom du client
     *
     * @return  string
     */ 
    public function getPrenom()
    {
        return $this->prenom;
    }

    /**
     * Set prénom du client
     *
     * @param  string  $prenom  Prénom du client
     *
     * @return  self
     */ 
    public function setPrenom(string $prenom)
    {
        $this->prenom = $prenom;

        return $this;
    }
}

Maintenant que ce compte client est disponible, nous allons pouvoir l'instancier.

La classe "Compte" étant disponible sur deux namespace différents (volontairement pour les exemples), nous allons devoir faire attention lors de la manipulation des classes.

Nous ajouterons la classe par

use App\Client\Compte as CompteClient;

Et nous l'instancierons comme ceci

$titulaire = new CompteClient('Adam', 'Robert');

Le compte bancaire

Dans la classe "Compte" (bancaire), nous allons modifier le constructeur de façon à utiliser le compte client comme titulaire du compte. Nous ferons les modifications suivantes

<?php
namespace App\Compte;

// On ajoute le compte client
use App\Client\Compte as CompteClient;

abstract class Compte
{
    /**
     * Titulaire du compte
     * @var CompteClient
     */
    protected $titulaire;

    //......

    /**
     * Constructeur de notre objet Compte
     * @param string $titulaire Titulaire du compte
     * @param float $solde Solde du compte
     */
    public function __construct(CompteClient $titulaire, float $solde = 500)
    {
        // On affecte le titulaire à la propriété titulaire
        $this->titulaire = $titulaire;

        // On affecte le solde à la propriété solde
        $this->solde = $solde;
    }

    //......

    /**
     * Retourne le titulaire du compte
     * @return CompteClient Titulaire du compte
     */
    public function getTitulaire() :CompteClient
    {
        return $this->titulaire;
    }

    /**
     * Définit le titulaire du compte
     * @param CompteClient $titulaire Titulaire du compte
     * @return Compte Compte bancaire
     */
    public function setTitulaire(CompteClient $titulaire):self
    {
        $this->titulaire = $titulaire;

        return $this;
    }

    //.....

}

Nous effectuerons les modifications similaires dans les classes CompteCourant et CompteEpargne.

A partir de maintenant, nous devrons instancier un Compte Client avant d'instancier un Compte Bancaire.

$titulaire = new CompteClient('Adam', 'Robert');

$compte1 = new CompteEpargne($titulaire, 500, 5);

Un var_dump de notre compte bancaire nous affichera le résultat suivant

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat

Visualisez les fichiers de cette série sur GitHub

Partager

Partager sur Facebook Partager sur Twitter Partager sur LinkedIn

Commentaires

Ecrire un commentaire

Pas encore de commentaire

Ecrire un commentaire