Salut, Pour mon travail sur le plugin Auto, je suis amené à modifier pas mal de classes de Galette, pour pouvoir les surcharger « facilement » ; comme par exemple la classe Picture (gestion des photos, dont dérive la classe AutoPicture qui gère les photos des voitures). Une différence fondamentale entre ces deux Objets : la constante PK (clé primaire de la table) : 'id_adh' dans le premier cas, 'id_car' pour le second (j'aurai pu utiliser 'id_adh' dans le second cas aussi, mais le nom du champ n'aurait pas reflété ce qu'il est vraiment, j'appelle ça du bricolage ;) ). Seulement, voilà, surcharger une constante et ensuite faire appel à self::PK retourne systématiquement 'id_adh' (la constante du parent donc) ; et ça, ce n'est pas bon. Depuis sa version 5.3, php autorise ce genre de joyeusetés : |$class = 'Picture'; echo $class::PK; ==> 'id_adh' ||$class = 'AutoPicture'; echo $class::PK; ==> 'id_car' || Alors qu'avant on avait : echo Picture::PK; ==> 'id_adh' echo AutoPicture::PK; ==> 'id_car' et dans l'objet picture : echo self::PK; ==> 'id_adh' (et donc jamais 'id_car') | Cette façon de faire permet de faire comme suit dans l'objet parent : public function maMethode(){ $class = get_class($this); echo $class::PK; } De ce que j'en ai vu, il n'y a pas de réelle solution équivalente solution en php < 5.3, mais des contournements qui sont plus compliqués... Et j'avoue ne pas avoir envie de me compliquer la vie. Du coup, à partir de maintenant, considérez que le trunk de Galette n'est compatible que pour php >= 5.3. @ bientôt, Johan Sources : http://fr2.php.net/manual/fr/language.oop5.static.php http://fr2.php.net/manual/fr/language.oop5.constants.php#89065
Attachment:
signature.asc
Description: OpenPGP digital signature