|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Développeur Web Inscription : juin 2010 Messages : 28 ![]() |
Bonjour,
Voici la problématique: Dans une classe, j'ai divers propriétés. J'ai besoin de savoir quand ces dernières ont été modifiées (pour traitement lors de l'enregistrement). J'ai donc pensé créer des accesseurs via __set(). Les propriétés sont donc stockées dans un tableau privé de la classe et l'appel de __set() me permet à la fois de mémoriser la donnée mais aussi de positionner un booléen pour savoir que les données de l'instance ont été modifiées. Jusque là, le contrat est rempli Seulement, avec cette méthode, les propriétés ne sont pas déclarées dans le code comme membres de ma classe. Résultat, lorsque j'utilise Doxygen pour générer la documentation de mon code, la classe ne possède pas les propriétés en question... Actuellement, la méthode de contournement à laquelle j'ai pensé est de déclarer les propriétés en tant que membres privés de la classe et d'y accéder via des méthodes publiques du genre getPropriete et setPropriete Mais je trouve cela un peu lourd et les vrais accesseurs comme on les trouve en c# me manquent Comment puis je faire autrement ??? Merci de vos tuyaux |
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Fabrice AgnelloDéveloppeur informatique Inscription : octobre 2010 Messages : 76 ![]() |
Bonjour,
est-ce que ceci pourrait faire l'affaire avec Doxygen ? Code :
Néanmoins, ce type de phpdoc est parfaitement pris en compte avec un éditeur comme Netbeans, qui propose lors de l'autocompletion les méthodes et propriétés déclarées dans la phpdoc. HTH. |
||
|
|
00
|
|
|
#3 | ||
|
Invité régulier
![]() Développeur Web Inscription : juin 2010 Messages : 28 ![]() |
Bonjour,
Merci pour cette réponse. Mais il y a un point que je ne comprends pas Si j'utilise une méthode setBar (à travers le __call), il ne faut pas que la propriété $bar soit directement accessible. Je dois la mettre en private au risque de voir son utilisation directe sans setBar Ai je bon ? Sinon, cette nuit, je pensais à quelque chose de proche: Ne pas utiliser de setBar (ni en tant que méthode réellement existante ni via un __call), utiliser la propriété $bar mais via un __set comme je l'avais déjà évoqué et pour satisfaire Doxygen simplement documenter la propriété Ce qui donnerait Code :
Encore merci |
||
|
|
00
|
|
|
#4 | ||
|
Membre actif
![]() Fabrice AgnelloDéveloppeur informatique Inscription : octobre 2010 Messages : 76 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Développeur Web Inscription : juin 2010 Messages : 28 ![]() |
Merci,
Je vois bien les différentes façons de coder tout ceci Dommage qu'il n'existe pas de getter/setter fonctionnant comme en c# (ie présentant une interface unique pour le get et set portant simplement le nom de la propriété) Ca ne simplifierait pas le code de la classe mais son utilisation dans du code externe Encore merci pour votre aide
|
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() ![]() |
Salut,
Fais attention car il y a des limitations avec les méthodes magiques qui peuvent dans certains cas t'empêcher de les utiliser : regardes ici Mon expérience a fait que j'ai arrêté des les utiliser à tout va. Et puis, quand tu changes d'IDE, cela peut devenir vite le bordel avec l'autocompletion.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
00
|
|
|
#7 |
|
Invité régulier
![]() Développeur Web Inscription : juin 2010 Messages : 28 ![]() |
Merci pour ce warning intéressant
Et donc fort de ton expérience, comment fais tu ? Pour chaque membre, tu crées un couple getter/setter ? Ou bien as tu une autres astuce ? |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Développeur Web Inscription : juin 2010 Messages : 28 ![]() |
J'ai tenté de documenter une propriété inexistante
Code :
@property integer $bar This property is blabla... Doxygen me jette Code :
warning: documented function `integer $bar This property is blabla' was not declared or defined. |
|
|
00
|
|
|
#9 | |
|
Expert Confirmé
![]() ![]() |
Citation:
Il m'arrive de stocker de temps en temps les paires : attribut/valeur dans un tableau. C'est le cas quand par exemple les attributs sont de même type. Et puis, en procédant ainsi, tu comprends vite le sens du mot monolithique. Des classes "Dieu" avec 30 ou 40 attributs... à te frapper, crois-moi tu réfléchis bien avant de te les envoyer. Enfin, en ayant proprement tes setter/getter tu évites aussi les problèmes liés aux différents EDI qui interprètent plus ou moins correctement les commentaires et la génération des docs ne pose généralement pas de problèmes non plus. Au vu des problèmes évités, je trouve que ces quelques lignes de code ne nuisent pas trop à la productivité.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile... |
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Développeur Web Inscription : juin 2010 Messages : 28 ![]() |
Merci de ton retour
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com