La redéfinition est-elle possible ou pas ? [PHP] - PHP - Programmation
Marsh Posté le 20-02-2008 à 11:30:44
Gagne, de toutes facons, je vois pas tellement comment ce serai gerable avec un langage qui ne type pas ses variales. Par contre, tu peux utiliser des valeurs par defaut et faire un zouli case
Code :
|
Gaffe quand meme a ce que -1 ne soit pas une valeur de parametre valide.
Marsh Posté le 20-02-2008 à 11:34:25
C'est vrai que sans le typage, c'est chaud, mais ça m'aurait suffit que ça fonctionne avec le nombre de paramètres Chiotte, bon, ben je vais voir ça d'une autre manière alors, mais pour le coup ça m'emmerde un peu. Je vais essayer de voir avec ta méthode, merci pour le coup de pouce.
Marsh Posté le 20-02-2008 à 11:34:44
La surcharge d'opérateurs n'existe pas en php.
Il y a moyen de tricher avec les fonctions magiques __set, __get, __call, mais c'est du bricolage amha :
http://fr3.php.net/manual/fr/langu [...] oading.php
Marsh Posté le 20-02-2008 à 15:20:36
A vrai dire, le but du jeu était de créer un objet User en récupérant (ou pas) ses informations dans une base de données MySQL suivant le nombre de paramètres fourni au constructeur. Genre, contruct() pour créer un objet User vide, contruct(<mes variables> ) pour créer un objet à partir des identifiants.
Je pense donc pouvoir faire un seul constructeur avec paramètres, et tester éventuellement si le paramètre d'identifiant de l'utilisateur est nul ou défini. Pensez-vous que la méthode soit "clean" ?
Marsh Posté le 20-02-2008 à 15:32:22
C'est à peu près aussi clean qu'on peut le faire en php.
Sinon tu peux tenter ce que j'ai mis plus haut, du genre avec __call , même si perso j'aime pas - et faut que __call soit appelé aussi en cas d'absence de __construct(), et j'ai jamais testé:
Code :
|
Marsh Posté le 20-02-2008 à 15:36:48
de mon coté j'utilise une classe UserFactory
qu iva avoir plusieurs methodes:
...
cette classe se charge de creer le bon user et d'appeller les setter qui vont bien par la suite. Mais c'ets pas bcp plus propre que l'appel a call
Marsh Posté le 20-02-2008 à 15:50:37
flo850 a écrit : de mon coté j'utilise une classe UserFactory
... |
C'est la solution que j'ai adoptée aussi pour la plupart des choses.
La classe User a un seul constructeur, et c'est à la factory de se démerder pour lui filer les bons paramètres...
Marsh Posté le 20-02-2008 à 15:58:10
ReplyMarsh Posté le 20-02-2008 à 16:00:25
soulmanto a écrit : et un array en paramètre? |
ça revient au même que le __call - perso je trouve ça très moche.
Marsh Posté le 20-02-2008 à 16:35:39
Je prend note de toutes ces méthodes
Après, pour mon cas pratique, le fait que je n'ai besoin que de deux constructeurs se gère plus facilement avec un if qu'avec quelque chose de plus complexe comme le call, et ça permet d'utiliser le contruct sans se poser de question et sans redéfinir deux fonction (construct et call).
Bref, ça reste du grand bidouillage, surtout quand on a pris ses habitudes avec un langage typé et qui supporte la redéfinition. Merci pour votre aide en tout cas
Marsh Posté le 20-02-2008 à 16:46:31
soulmanto a écrit : et un array en paramètre? |
skeye a écrit : ça revient au même que le __call - perso je trouve ça très moche. |
arf, merdouille c'est ce que j'aurai eu tendance à proposer aussi... bon ben je retourne me coucher travailler alors
Marsh Posté le 21-02-2008 à 10:20:22
skeye a écrit : |
Mouais, je trouve ça plutôt propre comme approche, ça évite une classe boiteuse...
Marsh Posté le 21-02-2008 à 10:53:46
soulmanto a écrit : Mouais, je trouve ça plutôt propre comme approche, ça évite une classe boiteuse... |
Bah à la place t'as N fonctions aux noms différents qui font office de constructeurs et un switch géant comme réel constructeur qui appelle la fonction qui va bien...ou pire juste un énorme switch qui fait tout...je vois mal comment on peut faire plus boiteux...
Marsh Posté le 20-02-2008 à 11:25:52
Hello,
Je me lance, pour m'occuper, progresser et ne pas perdre les notions que j'ai déjà, dans le développement d'un genre de CMS en PHP objet. J'essaie donc pour le moment pas mal de choses, mais je me confronte à un problème pénible. J'ai une classe (User) que j'aimerai faire réagir différemment en fonction des paramètres passés à son contructeur.
Typiquement, voila ce que j'essai de faire :
Problème, je reçois un message d'erreur sous la forme :
Cannot redeclare User::__construct()
Il me semblait que l'objet permettait en théorie de réaliser ce genre de chose, avec sélection automatique du construsteur à utiliser en fonction du nombre de paramètres et de leurs types (dans le cas d'un langage typé biensur, donc off pour PHP). Je tourne avec PHP5, et j'ai beau consulter la doc, je ne vois aucun cas ou cette technique est utilisée.
PHP serait-il incapable d'utiliser la redéfinition ?
Merci d'avance.
---------------
Au coeur du swirl - Mon feed