Les interfaces

  Les interfaces

Certains langages de programmation permettent à une classe d’hériter de plusieurs classes mères. Les concepteurs de PHP n’ont pas souhaité mettre œuvre cet héritage multiple et ont préféré travailler sur la notion d’interface. Une interface correspond à un ensemble de définitions de méthodes qu’une classe devra surcharger si elle souhaite l’implémenter. Une classe peut implémenter plusieurs interfaces. La définition d’une interface utilise le mot-clé interface suivi d’un bloc contenant la définition des méthodes. Listing 13-26 : Définition d’une interface interface MonInterface { public function methode1 (); public function methode2 (); // etc. } Une classe implémente une interface en utilisant le mot-clé implements. Listing 13-27 : Chaque classe doit implémenter la méthode aCotesEgaux() interface ObjetGeom { public function aCotesEgaux (); } class Rectangle implements ObjetGeom{ private $longueur = null; private $largeur = null; function __construct($longueur,$largeur) { $this->longueur = $longueur; $this->largeur = $largeur; } function aCotesEgaux () { if ($this->largeur==$this->longueur) { return true; } return false; } } Les interfaces Chapitre 13 LE GUIDE COMPLET 401 class Carre extends Rectangle { public $cote = null; function __construct($cote) { parent::__construct($cote,$cote); $this->cote = $cote; } function aCotesEgaux () { return true; } } Toutes les méthodes des interfaces doivent être implémentées par la classe. Une erreur est déclenchée dans le cas contraire. Listing 13-28 : La classe Carre n’implémente pas getNbCotes() interface ObjetGeom { public function aCotesEgaux (); public function getNbCotes (); } class Carre implements ObjetGeom { public $cote = null; function __construct($cote) { parent::__construct($cote,$cote); $this->cote = $cote; } function aCotesEgaux () { return true; } }

Itérateurs

La boucle foreach() peut être utilisée sur un objet afin d’afficher ses différents attributs. $rect = new Rectangle(3,5); foreach ($rect as $attr => $val) { print(« $attr = $val« ); } Le comportement par défaut consiste à passer, à chaque itération de la boucle, d’un attribut visible à l’autre. PHP vous permet d’implémenter l’interface Iterator afin de définir vous-même le comportement de la boucle foreach() : Tableau 13.1 : Différentes fonctions devant être implémentées pour définir votre propre itérateur. Méthode Rôle rewind() Revient au début de la liste current() Valeur de l’élément en cours key() Valeur de la clé de l’élément en cours next() Passer à l’élément suivant valid() Retourne false lorsque vous êtes à la fin de la ligne (true sinon) Figure 13.11 : Affichage des différents attributs de l’objet $rect avec la boucle foreach() Itérateurs Chapitre 13 LE GUIDE COMPLET 403 L’exemple suivant permet d’itérer parmi les différentes valeurs de l’attribut $tab plutôt que parmi les attributs de l’objet. Listing 13-29 : Définition de votre propre itérateur class Rectangle implements Iterator{ public $longueur = null; public $largeur = null; public $couleur = « rouge »; public $tab = array(« mm », »cm », »m »); public $i = 0; function __construct($longueur,$largeur) { $this->longueur = $longueur; $this->largeur = $largeur; } public function rewind() { print(« rewind« ); $this->i = 0; } public function current() { print(« current« ); return ($this->tab[$this->i]); } public function key() { print(« key« ); return ($this->i); } public function next() { print(« next« ); $this->i++; } public function valid() { print(« valid« ); if ($this->itab)) return true; return false; } } $rect = new Rectangle(3,5); foreach ($rect as $attr => $val) { print(« $attr = $val« ); }

Exceptions

La gestion d’erreurs en POO fait intervenir une notion supplémentaire : les exceptions. Ces dernières correspondent à des signaux pouvant être émis par une méthode et capturés ailleurs dans le code. Principe général L’émission d’une exception utilise le mot-clé throw. Listing 13-30 : La méthode test() émet une exception lorsque $n est null class MonObjet { function test($n=null) { if ($n==null) throw new Exception(« La valeur ne ✂ convient pas »); return true; } } Figure 13.12 : Trace des différents appels de PHP lors de la mise en œuvre d’un itérateur avec la boucle foreach  Mot clé throw L’émission d’une exception termine la méthode à la manière d’un return (). La capture d’une exception fait intervenir la structure try { … } catch (){…}. Le bloc try permet d’englober l’ensemble des appels aux méthodes susceptibles d’émettre des exceptions. Le bloc catch() se charge quant à lui de recevoir l’ensemble des exceptions émises par ces méthodes. Un bloc try doit obligatoirement être suivi d’un bloc catch(). Listing 13-31 : Contrôle d’un code susceptible d’émettre une exception $obj = new MonObjet(); try { // utilisation d’une méthode susceptible // d’émettre une exception $obj->test(); } catch (Exception $e) { // traitement de l’exception print($e->getMessage()); } De la bonne utilisation des exceptions Les exceptions ne doivent en aucun cas remplacer une gestion standard d’erreur. Elles ne doivent être utilisées que pour signaler des situations exceptionnelles. L’exemple suivant montre comment émettre une exception quand la méthode surface() est appelée sur un rectangle invalide. Listing 13-32 : Gestion d’une exception dans la méthode surface() class Rectangle { public $longueur = null; public $largeur = null; function __construct($longueur,$largeur) { $this->longueur = $longueur; $this->largeur = $largeur; } 406 LE GUIDE COMPLET Chapitre 13 La programmation objet function surface() { if ($this->longueur<1 || $this->largeur<1) { throw new Exception(« Valeurs incohérentes »); } return ($this->longueur*$this->largeur); } } $rect = new Rectangle(-1,4); try { echo $rect->surface(); } catch (Exception $e) { print(« « .$e->getMessage(). »« ); }

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

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