OVH Cloud OVH Cloud

[PHP5] __construct()

4 réponses
Avatar
fmeriot
Bonjour,
J'ai installé la beta4 de PHP5 afin de l'évaluer un peu.
Ma question est : peut on surcharger la fonction __construct() ?

par ex :
__construct(){}
__construct($id){}

Apparemment non, car j'ai une erreur à l'execution.

Donc, dans mon exemple précédent j'ai fait cette modif :
__contruct($id=null){
if($id==null)
...
else
...
}


Dès lors, je ne comprend pas trop l'intérêt d'avoir un constructeur
unifié par rapport à ce qui pouvait exister en PHP4 dans lequel le
constructeur portait le nom de la classe.

4 réponses

Avatar
loufoque
Message d'origine de fragmonster :

Bonjour,
J'ai installé la beta4 de PHP5 afin de l'évaluer un peu.
Ma question est : peut on surcharger la fonction __construct() ?

par ex :
__construct(){}
__construct($id){}

Apparemment non, car j'ai une erreur à l'execution.
On ne peut avoir qu'un constructeur par classe.


Donc, dans mon exemple précédent j'ai fait cette modif :
__contruct($id=null){
if($id==null)
...
else
...
}
Effectivement, c'est le seul moyen



Dès lors, je ne comprend pas trop l'intérêt d'avoir un constructeur
unifié par rapport à ce qui pouvait exister en PHP4 dans lequel le
constructeur portait le nom de la classe.
Pour l'héritage et tout ça c'est plus pratique.


Avatar
m-e-
"fragmonster" a écrit dans le message de news:
Bonjour,
J'ai installé la beta4 de PHP5 afin de l'évaluer un peu.
Ma question est : peut on surcharger la fonction __construct() ?

par ex :
__construct(){}
__construct($id){}


Dans la même classe ou dans une classe mère et une classe fille ?


Apparemment non, car j'ai une erreur à l'execution.

Donc, dans mon exemple précédent j'ai fait cette modif :
__contruct($id=null){
if($id==null)
...
else
...
}


Dans le post "changement de prototype dans une classe derive e PHP5", l'intervenant explique, d'après ce que j'ai compris, qu'on ne
peut pas réécrire une méthode d'une classe fille en ajoutant des paramètres (et en changeant simplement le nom, est-ce que ça marche
seulement ?).
Ca m'a surpris.

En tout cas, s'il s'agit bien d'une surcharge du constructeur dans la hiérarchie de l'héritage (humm), alors cela doit être du à la
limitation citée précédemment.




Dès lors, je ne comprend pas trop l'intérêt d'avoir un constructeur
unifié par rapport à ce qui pouvait exister en PHP4 dans lequel le
constructeur portait le nom de la classe.


Dans ce ZE2 il y a des choses qui sont étranges en effet.

Avatar
Shrom
"fragmonster" a écrit dans le message de
news:
Bonjour,
J'ai installé la beta4 de PHP5 afin de l'évaluer un peu.
Ma question est : peut on surcharger la fonction __construct() ?


Bien sûr. Voici un exemple venant de PHPBuilder.com:
<?php
class foo {
var $x;

function __construct($x) {
$this->x = $x;
}

function display() {
print($this->x);
}

function __destruct() {
print("bye bye");
}
}

$o1 = new foo(4);
$o1->display();
?>

Avatar
loufoque
Message d'origine de m-e- :

Dans le post "changement de prototype dans une classe derive e PHP5", l'intervenant explique, d'après ce que j'ai compris, qu'on ne
peut pas réécrire une méthode d'une classe fille en ajoutant des paramètres (et en changeant simplement le nom, est-ce que ça marche
seulement ?).
Ca m'a surpris.
On peut très bien le faire...

C'est juste le polymorphisme qui n'existe pas en PHP5. C'est à dire que
seule la méthode de la classe fille sera appelée, et non les deux.