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

_______________________________________________
Galette-devel mailing list
Galette-devel@gna.org
https://mail.gna.org/listinfo/galette-devel

Répondre à