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
Catégories
- Apache (6)
- Avent (14)
- C / C++ (5)
- CMS (16)
- Geekeries (41)
- HTML et CSS (6)
- Informations (12)
- Java (26)
- Javascript (8)
- L'anecdote du week-end (4)
- PHP (30)
- PHP objet (20)
- Projets (4)
- Référencement (4)
- SQL (9)
- XML (3)
- XMPP (4)
Tags
30 minutes Android Anecdote Ant Apache attribut C class CMS constructeur CSS date design Dotclear Eclipse erreur Expression Google Java Javascript Joomla jQuery Ligne de commande Linux Maven MySQL méthode PgSQL PHP POO Projet public regex Référencement SEO Shell SQL ssh tutoriel Url Rewriting Wallpaper Windows Wordpress XHTML XML