RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Constructeur

Forum : PHP - BDD
Sous Catégorie : BDD
Type du sujet : Sujet Normale
FAQ : FAQ PHP - BDD

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM PHP - BDD

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
ReaM
Superviseur :
- Java
Avatar de ReaM
Inscrit : 24/02/2005
Messages : 778
Message
#77950
Posté le 20/10/05 à 00:08
yep all , ca fait un moment que je n'ai plus posté ^^

Bon voila , j'ai fais qqls petites recherches sur un problèmes auquel je tiens absolument à avoir une solution et surtout la comprendre .

Je me suis lancé récemment dans la programation objet ( POO pour les intimes ) sous php . Etant habitué ( c'est un grand mot .. , j'en ai oublié quasi tout les notions ) sous java , j'ai l'habitude de faire dans mes class , plusieurs constructeurs avec un nombre d'attributs différent pour chacun .


class ma_classe { public ma_classe(var) { } public ma_classe(var1,var2) { } }


En gros ceci .

Malheureusement , sur php5 deux fonctions du même nom , php5 n'en veut pas . Je cherche donc une alternative à cela .
Une légère esquisse de la solution comme je l'ai fait ici m'aiderait .
Je pensais passer par l'héritage , mais je nage ^^
__________________________
[RRP4J]Image
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

windu
Membre du club
Avatar de windu
Inscrit : 08/07/2004
Messages : 691
Message
#77970
Posté le 20/10/05 à 13:24
salut ReaM...
tout d'abord, moi aussi c'est un peu mon come-back (j'ai pas pu venir de tout l'été Smiley )
bon, pour ton pb, je ne sais plus si PHP5 permet la surcharge de constructeur (à mon avis, non mais bon). COmme je peux pas tester (on est en PHP4 à la Fac), je te donne ma "solution" sans être sur du résultat:
Tout d'abord le constructeur en PHP5 a le nom __construct (avec 2 underscores) et non le même que celui de la classe!
Essaye donc de cette manière pour voir ce que ca donne...
Et tiens nous au courant Smiley
__________________________
FAQ PHP
Image

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

ReaM
Superviseur :
- Java
Avatar de ReaM
Inscrit : 24/02/2005
Messages : 778
Message
#77973
Posté le 20/10/05 à 13:31
Oui je suis au courant de ca , __construct() et _destruct() et les constructeurs surchargés php n'en veut pas , ce qui est bien dommage ( c'est mon avis ^^ ) .
L'exemple de code que j'ai mis au dessus se rapporte à ce que j'ai vu en java ;) .
Sinon en php5 tu peux tjs utilisé une fonction constructeur qui a le même nom que la class , je l'ai lu dans une faq , surement pour un soucis de compatibilié avec d'anciens scripts fait pour php4 .
Mais le hic c'est qu'on ne peut pas avoir deux fois ( ou plusieurs fois ) une function avec le même nom :/
__________________________
[RRP4J]Image
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne et personne ne sait pourquoi...

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

windu
Membre du club
Avatar de windu
Inscrit : 08/07/2004
Messages : 691
Message
#78002
Posté le 20/10/05 à 18:09
exact, j'avais oublié le coup de la compatibilité avec la POO de PHP4 Smiley

Et je suis bien d'accord avec toi, c'est domamge que ce soit manquant...
Une autre méthode (pure bidouille mais bon):

function __construct($arg1='', $arg2='', $argN='') { if(!empty=$arg1) && !empty($arg2) && !empty($argN)) { // constructeur nécessitant toutes les variables } elseif(!empty($arg1) && !empty($arg2)) { // autre constructeur } else { // constructeur sans argument }

Mais ca a pas mal d'inconvénients et c'est vite limité comme méthode
__________________________
FAQ PHP
Image

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

MisterV
Membre du club
Avatar de MisterV
Inscrit : 21/05/2004
Messages : 1603
Message
#78004
Posté le 20/10/05 à 18:26
Salut,

Alors, en fait pour faire ce que tu veux, en php tu n'as pas besoin de faire de surcharge.
Tu fais un seul constructeur qui va tout gérer.
Si c'est possible, c'est parce que le php n'ai pas typé, et donc (1) le constructeur est moins strict sur ce qu'il reçois.
En plus, (2)tu peux définir dans une fonction des paramètres optionnels, qui ne seront donc pas obligatoirement fournis lors de l'appel de la fonction.
Et troisiemement, il y a en php un moyen de récupérer l'ensemble des arguments qui ont été fourni à une fonction, sans que la fonction de précise qu'elle doit recevoir des arguments. (en gros tu déclare un fonction sans rien dans les parenthèses, et après tu récupères les arguments qui ont été fourni d'une autre manière)


Ces trois remarques font qu'il y a à mon avi deux solutions pour faire une classe "multi-constructeurs"

Premièrement :
Tu défini ton constructeur avec des paramètres optionnels. Tu traite après les données en fonctions des paramètres que tu reçois.
Exemple :

class foo { __construct(param1, param2 = null, param3=true, param4='defaut') { if(is_null(param2)) etc.... if(param3) etc.... } }


Comme tu peux le voir, tu peux définir la valeur que tu veux par defaut.

Par contre, ca peut être embetant cette solution si tu veux envoyer le parametre 1, le 4 mais pas le 2 et 3 par exemple.
Dans ce cas tu serait obligé d'envoyer les valeurs par defaut.... tu les connais pas toujours (enfin c chiant d'aller les rechercher).

Donc pour éviter ce problème, tu peux faire une fonction a laquelle tu envois les parametres comme tu veux. Mais après, faut pouvoir retrouver dans la fonction quel parametre est quoi. Donc a utiliser si tu peut differencier les differents parametres par leur type par exemple. (bien que php soit pas rigoureux sur les type, ceux-ci existent et on peut les utiliser).

exemple :

function foo() { $numargs = func_num_args(); echo "Number of arguments: $numargs<br />\n"; if ($numargs >= 2) { echo "Second argument is: " . func_get_arg(1) . "<br />\n"; } $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) { echo "Argument $i is: " . $arg_list[$i] . "<br />\n"; } }

(exemple tiré de la doc php.net)

Tu peux voir ici un peu les utilisations de cette solution.

++
__________________________
GGrrrrrrrrr.............

Comment poser une question ?

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM PHP - BDD



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.