Utiliser les méthodes et les attributs d’une autre class

Catégorie : PHP objet | Tag : , , , , , , , ,
Share

Ah, je viens enfin de mieux comprendre à quoi servait l’opérateur cons @@::@@. Dans le [précédent billet où j'en parlais|/post/2009/operateur-cons-et-les-mots-clef-self-et-parent] je disais qu’il permet de résoudre un attribut ou une méthode, éh bien c’est tout à fait vrai ! * Pour appeler un attribut ou une méthode d’une class dans cette même class, on utilise @@$this->methodeOuAttribut@@. * Pour appeler un attribut ou une méthode d’une class lorsqu’on a instancié cette class, on utilise @@$nomInstance->methodeOuAttribut@@. * Pour appeler un attribut ou une méthode d’une class dans une autre class, on utilise @@NomDeLaClass::methodeOuAttribut@@. Les deux class doivent bien sûr se trouver dans le même fichier, ou on peut inclure l’une dans le fichier de l’autre avec @@include()@@ ou @@require()@@. Dans le cas d’un attribut, si l’on tente d’y accéder avec le nom d’une class, cela signifie que notre attribut doit être __static__, il reste identique pour toutes les instances de cette class. Prêt pour un petit exemple (débile) ? /// ‘; } function saluer_en_langue($langue) { return $langue; } function fr() { return self::$fr; } function de() { return $this->de; } } class Appeler { function dire_bonjour() { echo DitBonjour::saluer(); } function dire_bonjour_en_langue() { echo DitBonjour::saluer_en_langue(DitBonjour::fr()).’
‘; echo DitBonjour::saluer_en_langue(DitBonjour::$en).’
‘; echo DitBonjour::saluer_en_langue(DitBonjour::de()).’
‘; } } $appel = new Appeler(); $appel->dire_bonjour(); $appel->dire_bonjour_en_langue(); ?> /// Ceci renverra : > Guten tag!%%% > Coucou le monde !%%% > Hello world!%%% > __Notice:__ Undefined property: Appeler::$de in __F:\bn\Web\Test\PHPObjet\test2.php__ on line __26__ Donc on voit bien que pour les méthodes il n’y a aucun problème, l’appel se fait très bien. (sauf si on avait rajouté des protected ou private, bref, je vous renvoie vers un [précédent billet|http://30minparjour.la-bnbox.fr/post/2009/la-visibilite-tu-vois]) Lorsqu’il s’agit des attributs… Pour le français, l’attribut $fr est protégé, j’ai donc utilisé un accessor avec @@self::@@ pour avoir la valeur de l’attribut pour cette class (ce qui oblige la staticité) : pas de problème. Mais l’anglais est la preuve que l’on peut aussi accéder directement à l’attribut s’il est en accès public. Quant à l’allemand, il renvoie une erreur puisque le @@$this->@@ implique que l’appel va chercher l’attribut $de dans la class Appeler, il n’existe pas, donc une erreur est renvoyé. Bon, j’avoue que j’ai encore du mal à saisir les subtilités entre self, parent et $this, (ça parait pourtant tellement simple en théorie), mais encore quelques petits exemples, voir quelques petits tests, et ça devrait être bon :D

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>