Comment utiliser les « traits » en version PHP < 5.4

Salut à tous,

 

Cet article est technique, et vraiment destiné aux développeurs PHP.

Si vous êtes rendu sur cette article, c'est surement que vous souhaitez réutiliser / partager des méthodes entre divers objets / classe.

 

 

PHP 5.4 a implémenté ce que l'on appel des "traits", ça permet "grosso merdo", de développer une libraire de fonction, de bout de classe, et de les inclures dans vos objets.

 

trait Rechargeable{


public $energy = 100;


public function recharger(){
$this->energy = 100;
}

}



class Pile extends Battery{

use Rechargeable;

}

 

 

Alors non, il ne seras pas spécialement simple d'inclure des "bouts" de classe dans vos objets.

 

... MAIS ... 

Il sera possible en suivant mes explications d'injecter dans vos objets des fonctions, et ainsi de faire de la réutilisation de code !

 

L'idée c'est que depuis une classe, ou une fonction on peut appeler des variables dîtes "GLOBALES".

Et c'est les globales qui vont nous permettre de mettre en oeuvre : un "pseudo" traits
Ces variables globales sont appelables de partout.

On peut leurs associer n'importe qu'elle type de valeur :
Tableau, Objet, Function, Chaine, Entier, ...

 

L'idée c'est de créer une fonction dans une variable globale :

Exemple ci-dessous.

Capture

 

...Voilà ...

Avec cette variable, vous êtes en mesure d’exécuter la fonction de cette manière :

$T("Henri", 45, "Homme");

 

 

Pour appeler une variable "globale" depuis une fonction on utilise le mot "global" :

Capture

 

Ainsi, on voit ici que j'inclus ma variable globale "T"
On peut également voir sur cette écran comment l'utiliser.

 

 

Alors si l'on applique cette technique à un Objet ça donne ceci :

 

Capture

 

On observe, une classe "Homme" et une classe "Femme", chacune dispose de la même fonction "présentation".

On voit que le script fonctionne, sur l'écran de gauche.

 

 Il y a un avantage à cette technique:
C'est que contrairement aux traits, on peut également lui donner un autre nom.
Au cas ou l'on souhaiterais créer une fonction qui prendrait le même nom.

 

Laisser une réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.