A quand la surdéfinition de méthode d'une classe PHP 5 [Résolu]

Signaler
Messages postés
48
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
23 avril 2006
-
Nifhell
Messages postés
48
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
23 avril 2006
-
Bonjou à tous,

Je souhaiterais savoir s'il est possible comme en C++ de surdéfinir le constructeur d'une classe en PHP?

D'apés mes essais de code, apparement non (j'ai toujours cette @[\^\#^`~\`!..ain d'erreur: Fatal error: Cannot redeclare... ) , mais peut être que dans de futur release de php5 cele sera possible (et je parle pas des bidouillages discutés dans ce forum; qui d'ailleurs confondent "surcharge" et "surdéfinition" d'une méthode.... http://www.phpcs.com/infomsg/SURCHARGE-METHODES-14_680116.aspx,
http://www.phpcs.com/infomsg/OBJET-PHP5-SURDEFINITION-FONCTIONS-29_672301.aspx)

Qui a des infos?

Apparemment les moyens actuels proposés pour simuler une surdéfinition:
- C'est de faire un test sur le nombre d'argument passé au constructeur... oui mais si on fait des constructeurs avec des paramètres optionels??
- D'autre utilise la surcharge (et il s'agit là bien de surcharge) des constructeurs des parents de la classe, mais ça veut dire qu'il faut faire autant d'héritage que de constructeurs désirés... pas pratique...

A quand un vrai language orienté objet en PHP?

oOo__{NiFhElL}__oOo== Si parfois des gens paraisse brillant avant d'avoir l'air con c parce que la lumière va plus vite que le son....

6 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Via la doc de php.net :



Even PHP 5 doesn't allow to redeclare a method in a class. So, it's
impossible to create differents constructors to a object with unique
parameters, something common JAVA.



Aucune redéclaration de méthode possible dans une classe à l'heure actuelle.

Si tu veux faire un truc dans le genre, il te faut utiliser func_get_args() pour pouvoir gérer un appel dynamique de ta méthode.



http://fr.php.net/manual/fr/language.oop5.decon.php#53838</code>                        
                
                
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
C'est ce que fait Malalam dans les liens qu'a passé Nifhell :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
20
Hello,

l'objet n'était pas, à la base, une priorité de php. Ce qui est logique, PHP étant au départ destiné à n'être qu'un langage de script. Aux débuts de php, on avait pas les besoins que l'on peut aujourd'hui avoir, la technologie web n'étant pas, à l'époque, très développée.
PHP se transforme peu à peu en véritable langage orienté objet...mais bon, il faut se montrer patient :-) N'oublions pas que PHP se doit de rester PHP...les développeurs ne peuvent pas se permettre d'en faire un langage totalement nouveau, et doivent conserver un minimum de compatibilité ascendante.


Donc, ce sont bel et bien les deux seules méthodes possibles à l'heure actuelle.


Pour ta 1ère remarque, il suffit d'ajouter les tests qui vont bien dans tes surdéfinitions.
Ca reste du bidouillage, mais c'est toujours mieux que rien.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
"N'oublions pas que PHP se doit de rester PHP"

C'est mal parti, c'est comme les voitures : de plus en plus lourdes et de moins en moins performantes... lol

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
48
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
23 avril 2006

C'est vrai, mais regarde ce qu'est devenu le PERL (v5) aujourd'hui... c'est vrai qu'il présente quelques aberrations (ça s'écrit comme ça?) par rapport à un vrai langage objet (comme de systématiquement terminer ses packages par "1;", sinon y a une erreur LOL), mais ça marche et réussi à être orienté objet tout en gardant sa nature et sa facilité de programmation de langage "script". Je l'utilise souvent pour parser des logs, ou des CSV, et cela comme le ferai un script que je met en crontab mais en POO :p
Bon je ne sais pas si le PERL permet la surdéfinition lui aussi (je n'ai jamais eu besoin d'aller aussi loin), mais bon j'attends quand même bien plus du PHP, qui avec Zend (notemment avec l'intégration des web services), pousse à devenir enfin un langage de production de service "entreprise" et non plus un langage de "page perso" cantonné dans son coin.

Bref, bien, même trés bien PHP5, mais peut encore mieux faire...

==oOo__{NiFhElL}__oOo==
Si parfois des gens paraisse brillant avant d'avoir l'air con c parce que la lumière va plus vite que le son....
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,

non ça n'existe pas encore (peut-être pour PHP6 ?) cependant la méthode de Malalam, bien qu'un peu lourde (mais c'est la seule "vraie" possibilité vu qu'on peut pas faire autrement) m'a l'air pas mal du tout ;-)

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>