Nifhell
Messages postés48Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention23 avril 2006
-
25 mars 2006 à 23:24
Nifhell
Messages postés48Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention23 avril 2006
-
27 mars 2006 à 21:49
Bonjou à tous,
Je souhaiterais savoir s'il est possible comme en C++ de surdéfinir le constructeur d'une classe en PHP?
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....
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 26 mars 2006 à 10:26
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>
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 27 mars 2006 à 10:03
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.
Nifhell
Messages postés48Date d'inscriptionmardi 17 février 2004StatutMembreDernière intervention23 avril 2006 27 mars 2006 à 21:49
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....
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 26 mars 2006 à 10:13
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 ;-)