mail[Galette-devel] PHP >= 5.3


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Johan Cwiklinski on October 03, 2009 - 20:39:
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


Related Messages


Powered by MHonArc, Updated Tue Oct 06 21:40:07 2009