constructeur

Invité
Invité n'ayant pas de compte PHPfrance

01 août 2007, 10:33

lisant la doc j'ai vu cela ce matin
Note: Les constructeurs parents ne sont pas appelés implicitement si la classe enfant définie un constructeur. Si vous voulez utiliser un constructeur parent, il sera nécessaire de faire appel à parent::__construct().

Exemple 19.8. Exemple d'utilisation des nouveaux constructeurs unifiés
<?php
class BaseClass {
    function __construct() {
        print "In BaseClass constructor\n";
    }
}

class SubClass extends BaseClass {
    function __construct() {
        parent::__construct();
        print "In SubClass constructor\n";
    }
}

$obj = new BaseClass();
$obj = new SubClass();
Or si on appel pas le constructeur parent il s'exécute quand même, l'exemple précédent l'exécute deux fois.
class BaseClass {
    function __construct() {
        print "In BaseClass constructor\n";
    }
}

class SubClass extends BaseClass {
    function __construct() {
        //parent::__construct();
        print "In SubClass constructor\n";
    }
}

$obj = new BaseClass();
$obj = new SubClass();
Comment cela se fait-il ?
C'est la doc ou c'est moi qui va pas ?

Eléphanteau du PHP | 48 Messages

01 août 2007, 10:34

dsl je me suis pas identifié pour le post au dessus
je post un petit message pour recevoir les réponse à ma question
merci
-- fight the void --

Invité
Invité n'ayant pas de compte PHPfrance

08 août 2007, 08:18

Salut, je ne vois pas vraiment ou est ton problème, quand tu fais un $obj = new SubClass(); dans ton 2ème fragment de code, le contructeur de baseClass n'est pas appellé implicitement, si ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 août 2007, 09:06

Dans ton dernier exemple, il est normal que le constructeur de BaseClass soit appelé ... tu demandes la construction d'un objet BaseClasse ;)

Si j'exécute ce code chez moi, j'obtiens ce résultat :
In BaseClass constructor // grâce à la ligne $obj = new BaseClass();
In SubClass constructor // grâce à la ligne $obj = new SubClass();
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 843 Messages

08 août 2007, 11:26

en gros si tu fait juste $obj = new SubClass(); avec l'exemple de la doc, les deux objets seront construit ;)

si tu instancie uniquement la classe mere la file ne construira rien...
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

ViPHP
ViPHP | 5924 Messages

08 août 2007, 17:40

en gros si tu fait juste $obj = new SubClass(); avec l'exemple de la doc, les deux objets seront construit ;)
Non, ce n'est pas parce qu'il y a héritage que 2 objets sont construits.
C'est juste que l'objet construit hérite des propriétés et méthodes des classes parentes. Dans l'exemple, l'objet construit est juste construit avec le constructeur de sa classe et de sa classe parente (du fait de l'appel à parent::__cobnstruct() )

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 août 2007, 17:45

Dans le 1er exemple, oui, dans le second, non ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5924 Messages

08 août 2007, 17:54

Dans le 1er exemple, oui, dans le second, non ;)
Il parlait spécifiquement de $obj = new SubClass(); qui ne construit, dans tous les cas, qu'un objet.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 août 2007, 18:03

Je parlais du constructeur.

Dans le second exemple, la création d'une instance de subClasse n'utiliseras pas le constructeur de la classe mère car un constructeur est défini dans la classe fille mais que le constructeur de la classe mère n'est pas appelée.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5924 Messages

08 août 2007, 18:05

Je parlais du constructeur.

Dans le second exemple, la création d'une instance de subClasse n'utiliseras pas le constructeur de la classe mère car un constructeur est défini dans la classe fille mais que le constructeur de la classe mère n'est pas appelée.
Ouais, mais en l'occurence, je parlais de l'exemple de la doc :-/

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 août 2007, 18:08

ah, d'accord ...
j'était resté sur les exemples du 1er post :lol:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer