Surcharger un constructeur au sein d'une même classe [Résolu]

michel_roger 60 Messages postés lundi 6 octobre 2003Date d'inscription 18 août 2006 Dernière intervention - 30 juin 2006 à 11:55 - Dernière réponse : michel_roger 60 Messages postés lundi 6 octobre 2003Date d'inscription 18 août 2006 Dernière intervention
- 3 juil. 2006 à 08:58
Bonjour,

Je cherche actuellement à créerqqs classes en PHP5 et désire savoir s'il est possible de surcharger un constructeur en PHP5.
En effet, j'ai essayé de donner le même nom à tous les constructeurs (__construct(paramètres) et __construct(param1, paramN1) ou maSousClasse(paramètres) et maSousClasse(param1, paramN1) et là :
Erreur de script : cannot redeclare method maSousClasse::maSousClasse.
Je croyais pourtant que la surcharge était prise en compte en PHP5, cependant on dirait qu'elle est prise en compte d'une classe mère à une classe fille mais pas au sein d'une même classe...
Voici un exemple de ce que je voudrais faire :

<?php
abstractclass maClasse {
    private $param1;
    private $param2;
    private $param3;
    private $param4;
    ...
    private $paramN;
 
    // Constructeur de base nécessitant beaucoup de paramètres (peu utilisé) 
    public function__construct($param1, $param2, $param3, $param4, ..., $paramN) {
        $this->param1 = $param1;
        $this->param2 = $param2;
        $this->param3 = $param3;
        $this->param4 = $param4;
        ...
        $this->paramN = $paramN;
    }
}



class maSousClasse extends maClasse {
    private $paramN1;
 
    // Constructeur de base nécessitant beaucoup de paramètres (peu utilisé également)
    public function__construct($param1, $param2, $param3, $param4, ..., $paramN, $paramN1) {
        // On appelle le constructeur parent avec tous les paramètres
        parent::__construct($param1, $param2, $param3, $param4, ..., $paramN);
        $this->paramN1 = $paramN1;
    }
    // Constructeur surchargé (utilisé souvent car moins de paramètres)
    public function maSousClasse($param1, $paramN1) {
        // On appelle le constructeur parent avec la majorité des paramètres à null
        parent::__construct($param1, null, null, null, ..., null);
        $this->paramN1 = $paramN1;
    }
}
// Lorsque j'appelle mon constructeur avec tous les paramètres, tout se passe bien :
$classe = new maSousClasse ("test", 2, 3, 4, ..., $N, $N1);
// Lorsque j'appelle mon constructeur "simplifié",
// Erreur de script, les paramètres sont manquants :
$classe = new maSousClasse(("test", $N1);
?>
Merci d'avance pour votre aide
Bonne journée
Cordialement
Afficher la suite 

4 réponses

Répondre au sujet
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 30 juin 2006 à 14:00
+3
Utile
Exact, on ne peut surcharger une méthode au sein d'une même classe.

Pour faire ce que tu veux faire, utilises func_num_args();
Ex :

class x extends y {

public function __construct() {
$num_args = func_num_args();
if ( $num_args === 2 ) { // 2 arguments passé en paramètre
} else { // Plein plein d'arguments :)
}
parent::__construct();
}

}

Seul et unique facon pour le moment.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de FhX
coockiesch 2268 Messages postés mercredi 27 novembre 2002Date d'inscription 13 septembre 2013 Dernière intervention - 30 juin 2006 à 11:59
0
Utile
Salut!
Je vais peut être dire une connerie, mais en utilisant
func_num_args ( http://ch2.php.net/manual/fr/function.func-num-args.php )
func_get_arg ( http://ch2.php.net/manual/fr/function.func-get-arg.php )
func_get_args ( http://ch2.php.net/manual/fr/function.func-get-args.php )

Tu arrives pas à triche? :)

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Commenter la réponse de coockiesch
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 30 juin 2006 à 12:07
0
Utile
Salut,

la surcharge en php5 ne correspond pas à celle du cpp
en cpp, on peut surcharger les opérateurs :

objet a=new objet();

objet b=new objet();

objet c=a+b;

on peut aussi surcharger la copie d'objets en cpp...

en php, on surcharge isset, unset, et les accès aux méthodes et aux propriétées, à ma conaissance, rien de plus

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Commenter la réponse de coucou747
michel_roger 60 Messages postés lundi 6 octobre 2003Date d'inscription 18 août 2006 Dernière intervention - 3 juil. 2006 à 08:58
0
Utile
Ok merci beaucoup je vais voir avec ça.

Bonne journée et bonne semaine
Commenter la réponse de michel_roger

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.