Série : PHP Orienté Objet
Fichiers : https://github.com/NouvelleTechno/PHP-Oriente-Objet
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
Catégories : PHP Tutoriel Live-Coding poo
Mots-clés : Tutoriel PHP Live-Coding POO Orienté Objet objet injection dependance