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

Temps de lecture : 9 minutes environ.

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

5 - Live Coding : PHP Orienté Objet - Injection de dépendance
Article publié le - Modifié le

Catégories : PHP Tutoriel Live-Coding poo

Mots-clés : Tutoriel PHP Live-Coding POO Orienté Objet objet injection dependance

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn