constructeur en PHP 5 - PHP - Programmation
Marsh Posté le 25-09-2006 à 11:45:50
et tu ne peux pas faire ta requête sur la BDD avant et ensuite rentrer les infos en paramètres ? auquel cas ça ne te ferais plus qu'un seul type de constructeur.. nan ?
Marsh Posté le 25-09-2006 à 11:51:52
rufo > S'il n'est pas possible de surcharger le constructeur, alors fait deux classes dont une basé sur l'autre. ( mot clé "extends". Voir http://fr2.php.net/manual/fr/ref.classobj.php ) Ca aura au moins le mérite de ne pas te trimbaler 36 paramettre quand ils sont inutile et ce sans être obligé de réécrire deux fois le même code.
Une autre solution serait d'avoir des fonctions init() et init_db() qui te permettrait de charger les infos là où il faut et même de réinitialisé ton objet.
Marsh Posté le 25-09-2006 à 12:07:55
ReplyMarsh Posté le 25-09-2006 à 12:39:56
php5 ne supporte pas le polymorphisme ? Il me semblait que oui ?
tu ferais donc :
Code :
|
Si php gère bien le polymorphisme, cette solution est plus élégante et plus pratique.
Marsh Posté le 25-09-2006 à 12:49:42
c0wb0y a écrit : php5 ne supporte pas le polymorphisme ? Il me semblait que oui ?
|
au début, c'est ce que je comptais faire. Mais il me semble que j'avais essayé et je m'étais fait jeter (redeclarerd function).
Marsh Posté le 25-09-2006 à 12:51:48
gizmo a écrit : Ou bien tu fais simplement deux factory methods. |
c'est ce que fait mon constructeur il me semble. Suivant, la valeur du paramètre $Mode, je construis mon objet différemment (il appelle telle ou telle méthode). c'est bien le principe de la factory?
Marsh Posté le 25-09-2006 à 12:57:28
rufo a écrit : c'est ce que fait mon constructeur il me semble. Suivant, la valeur du paramètre $Mode, je construis mon objet différemment (il appelle telle ou telle méthode). c'est bien le principe de la factory? |
oui, mais non. Ce qui tu fait, c'est une dérivée des factory, mais c'est lourd car cela impliqe des modification de cette méthode pour chaque nouveaux type d'élément.
Ce que j'imagine est plutôt du type
Code :
|
Ainsi, tu découples ta création de ton objet de l'initialisation de tes paramètres de création et en cas de nouveau type de création, tu ne dois que créer une nouvelle factory sans rien toucher au reste.
Marsh Posté le 25-09-2006 à 13:26:57
gizmo a écrit : oui, mais non. Ce qui tu fait, c'est une dérivée des factory, mais c'est lourd car cela impliqe des modification de cette méthode pour chaque nouveaux type d'élément.
|
ok, j'ai compris. Oui effectivement, ça va le faire. Merci
Marsh Posté le 25-09-2006 à 17:21:15
En PHP on utilise souvent des types de paramètre différents pour faire faire différentes choses à une fonction, car il n'est pas possible de déclarer une fonction avec un nombre de paramètres différents.
Voir par exemple: http://fr.php.net/manual/fr/function.is-int.php
Utilise ensuite les paramètres par défaut pour faire varier le nombre de paramètres.
Une autre possibilité souvent utilisée, sans paramètres variables, est de prendre soit une array en paramètre, soit un entier. De plus, l'array peut éventellement contenir divers clés dont on connait alors les noms par avance, et ces derniers peuvent servir à aiguiller suivant différents algorithmes.
Ensuite, pour isoler les différents algorithmes de ton constructeur, tu peux utiliser plusieurs fonctions init() de la même façon que les factory présentées plus haut.
Marsh Posté le 26-09-2006 à 09:16:51
nargy a écrit : En PHP on utilise souvent des types de paramètre différents pour faire faire différentes choses à une fonction, car il n'est pas possible de déclarer une fonction avec un nombre de paramètres différents. |
j'ai déjà utilisé ce genre de méthode, le coup de l'entier (ou pour faire plus lisible, une constante) qui indique l'algo à utiliser et le tableau contenant un nb de paramètres variables, dans le cas de fonctions de recherche multi-critères par ex (ça s'y prête bien). Par contre, dans le cas de la construction d'un objet, j'ai quand même une préférence pour les fonctions factory...
En tout cas, vivement le support complet de la surcharge des fonctions dans PHP
Marsh Posté le 26-09-2006 à 22:52:25
Citation : |
Ça risque pas d'arriver puisque la méthode recommandée pour faire ça est la suivante:
Code :
|
Ce qui n'a ABSOLUMENT rien à voir avec l'emploi de constantes. Mais alors VRAIMENT rien à voir.
PS: je me disais bien que si je ne postais pas de code mes explications pourraient être mal interprétées.
Marsh Posté le 27-09-2006 à 08:49:09
Euh... recommandee ou? Et vu qu'il vont sans doute permettre le renforcement du typage dans les appels des fonctions, ca me laisse dubitatif.
Marsh Posté le 27-09-2006 à 11:19:00
nargy a écrit :
|
ben si, un peu quand même. Dans ma première version de fonction, $param prenait comme valeur des constantes du genre FROM_DB (const valant 1), FROM_PARAMS (const vant 2), etc. et ensuite, je faisais un switch($param) suivi de "case FROM_DB", de "case FROM_PARAMS"... Ca rend plus lisible le code qu'une succession de if-elseif-else avec des tests du genre if ($param == 1), if ($param == 2), n'est-ce pas?
Marsh Posté le 28-09-2006 à 00:23:50
Je réitère: ça n'a rien à voir, même si c'est effectivement équivalent à l'emploi de constantes. C'est moins une question de performance (et pourtant si...) ou de facilité d'écriture (et pourtant aussi..), que de philosophie. C'est de cette manière que les fonctions natives de PHP fonctionnent, et il est donc naturel de coder de la même façon.
Celà ne restreint pas bien sûr les possibilités de programmation, mais en respectant cette règle: <<les types des arguments déterminent ce que fait la fonction>> celà permet une meilleure intégration des fonctions utilisateur.
Marsh Posté le 25-09-2006 à 11:40:37
Bonjour,
J'ai un souci de conception en PHP 5.
J'ai un objet qui peut être construit à partir d'en enregistrement contenu dans une BD ou à partir de valeurs passées en paramètres. Or, j'ai pas l'impression qu'on puisse surcharger le constructeur.
J'ai donc fait le truc suivant :
mais y'aurait pas mieux quand même comme méthode? Merci