Page 1 sur 1

Histoire de constructeur...

Posté : 05 févr. 2006, 15:28
par Matt.Rixx
Bonjour à tous,

Etant donné qu'en php5 il y a 2 facons de faire un constructeur (__construct ou une méthode ayant le meme nom que la classe), existe-t-il un moyen pour que php ne me renvoit pas de NOTICE si les 2 existent ds une classe et que le niveau d'erreur est E_ALL | E_STRICT sachant que je ne souhaite absolument pas changer le niveau d'erreur. Mon souhait est donc d'éventuellement changer la config de php pour qu'il ne prenne jamais une méthode du meme nom que la classe pour un constructeur.

Posté : 05 févr. 2006, 16:44
par rami
Pour ne pas utiliser uniquement __construct()?

Posté : 05 févr. 2006, 16:55
par Matt.Rixx
pardon ?

Posté : 05 févr. 2006, 17:21
par Cyrano
Et si tu n'avais qu'un seul constructeur par classe ?

Posté : 05 févr. 2006, 18:19
par Truc
C'est par convention qu'un constructeur peut porter le nom de la classe pourquoi vouloir réinventer la POO ?

suffit de renommer la méthode par un autre nom que celui utilisé pour la classe.

Sinon pour avoir plusieurs constructeurs il faut qu'il y ait une différence au niveau des paramètes, par exemple un constructeur n'en a pas alors que le 2eme en a 1.

Posté : 05 févr. 2006, 19:09
par Matt.Rixx
Et si tu n'avais qu'un seul constructeur par classe ?
Disons que la fonction ayant le meme nom que la classe n'est justement pas le constructeur ! D'abord, d'un point de vue purement technique car il y a la méthode __construct() et ensuite d'un point de vue de conception car je ne lui ai pas attribué ce role.

Maintenant si ta question veut dire "pourquoi tu fais pas en sorte que ta méthode ayant le meme nom que ta classe n'aie plus le meme nom que ta classe, ce qui, du coup, lui enleverait ce role potentiel de constructeur et qui, par extension, résoudrais ton problème?" alors je te répondrais que le pourquoi du comment n'est pas la question. Ma question étant de savoir s'il est possible de faire sauter ce NOTICE en enlevant tout bonnement le support de l'ancienne forme des constructeurs, gardés uniquement pour assurer la rétro-compatibilité avec PHP4

C'est par convention qu'un constructeur peut porter le nom de la classe pourquoi vouloir réinventer la POO ?
Comme je viens de le dire, c'est uniquement pour assurer la rétrocompatibilité avec php4 que c'est resté, sinon, va vérifier par toi-même, le constructeur des Langage Objet est (pratiquement) toujours une méthode avec un nom bien particulier, identique ds toutes les classes, au lieu du meme nom que la classe elle meme. Je ne réinvente donc pas la POO, j'essaye plutot de l'adapter a PHP5... a vrai dire, j'essaye simplement de supprimer la rétro-compatibilité avec PHP4
suffit de renommer la méthode par un autre nom que celui utilisé pour la classe.
Oui, il suffit aussi, que je passe en E_ALL (donc sans le E_STRICT), ou bien que je n'utilise pas les objets... voire carrement plus PHP... oui ca résoud le problème d'une certaine facon... mais ce n'est pas ce que je demande.
Sinon pour avoir plusieurs constructeurs il faut qu'il y ait une différence au niveau des paramètes, par exemple un constructeur n'en a pas alors que le 2eme en a 1.
Heu... la, je me demande définitivement si tu as compris que je parlais de PHP5... a ma connaissance, le polymorphisme n'est pas possible...

Posté : 05 févr. 2006, 20:17
par Truc
Hi hi, c vrai qu'en me relisant c'est pas tres constructif :lol:
ceci dis c'était plus de la "surcharge" que du "polymorphisme"

ce que je voulais dire en faite est d'appler un constructeur __construct() et l'autre avec le nom de la classe (effetivement les paramètres ont s'en fiche royalement) cette pratique est tout a fait normale.

Et pour répondre franchement à ta question je dirais que ce n'est pas possible en attendant une version de php6 et que php4 sera devenu completement obsolete peut être.

Posté : 05 févr. 2006, 21:02
par iclo
A ma connaissance, dans beaucoup de langages O.O. le nom de la classe est un terme réservé pour la signature du constructeur.
Alors je sais que ce n'est pas le sujet de ce poste, mais je trouve "dangereux" d'utiliser le nom de la classe pour autre chose que le constructeur par soucis de lisibilité et de maintenabilité.

Posté : 05 févr. 2006, 22:08
par rami
Disons que la fonction ayant le meme nom que la classe n'est justement pas le constructeur ! D'abord, d'un point de vue purement technique car il y a la méthode __construct() et ensuite d'un point de vue de conception car je ne lui ai pas attribué ce role.
Erreur de conception! Comme te l'a dit iclo, utiliser le nom de la classe comme nom d'une méthode quelconque est dangereux, et dans le cas de PHP5, génère forcément une NOTICE si tu définis __construct() et une méthode du même nom de ta classe.

Tu as certainement une bonne raison d'avoir procédé ainsi, mais là, je ne vois pas de solution à ton problème...