Difference entre __constructor et _construct

Résolu/Fermé
Profil bloqué - 15 août 2010 à 13:29
Crillus Messages postés 192 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 22 novembre 2013 - 16 août 2010 à 13:12
Bonjour,

Je suis tombé sur une classe PHP avec un constructeur défini de cette façon :

public function __constructor($post)

notez bien qu'il y a deux "_" avant le "c" de constructor.

Ma question est la suivante :
quelle est la différence entre cette définition et celle ci:

public function _construct($post)

et à quoi sert le "__" dans le nom ?

P.S. Je sais que cette dernière nous évite d'utiliser un constructeur ayant le même nom
que la classe.



8 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
15 août 2010 à 15:32
Salut.

Ça ne serait pas plutôt l'inverse ?
__construct et _constructor ?

De toutes façons, il n'y a que deux constructeur : __construct() et NomDeLaClasse()
1
Crillus Messages postés 192 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 22 novembre 2013 563
15 août 2010 à 16:43
alors...

la fonction __constructor() est le constructeur par défaut d'une classe, elle est prédéfinie mais n'apporte rien de plus que le constructeur par défaut que l'on écrirait NomDeMaClasse().

donc si tu veux t'en servir tu peux faire

public function __constructor()
{
// traitement de constructeur comme si
// la fonction s'appelait NomDeMaClasse()
}

Et si le système a des erreurs de PHP (syntaxe, allocation mémoire, autre...) tu les verras s'afficher.

cette fonction __constructor() a été intégrée dans PHP5 et permet de faire un vrai constructeur par défaut avec un traitement d'erreurs adapté.

Quand cette fonction comporte des paramètres -comme ton $post par exemple- on parle de constructeur normal.

quant à _constructor() avec un seul _, il doit s'agir d'une faute d'orthographe, car ce n'est pas une fonction prédéfinie.
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
Modifié par avion-f16 le 15/08/2010 à 18:30
C'est __construct et pas __constructor le constructeur par défaut.
https://www.php.net/manual/fr/language.oop5.decon.php
__constructor sera considéré comme n'importe quelle autre méthode, donc elle ne sera pas appelée à la création de l'objet (ligne avec le mot-clé "new").

<?php 
class MaClasse() { 
    function __construct() { 
        echo "L'objet a bien été créé.<br/>\n" 
         . "Ce message s'affiche grâce à __construct<br/><br/>\n"; 
    } 

    function __constructor() { 
        echo "L'objet a bien été créé.<br/>\n" 
         . "Ce message s'affiche grâce à __constructor<br/><br/>\n"; 
    } 
} 

$objet = new MaClasse(); 
// $objet->__constructor(); 
?>
Ce code n'affichera que ça :
L'objet a bien été créé. 
Ce message s'affiche grâce à __construct

Si tu décommentes l'avant dernière ligne, tu verras les deux textes s'afficher.
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
1
Crillus Messages postés 192 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 22 novembre 2013 563
16 août 2010 à 13:12
Et je m'excuse pour mon erreur avec la fonction __construct() , je fait souvent l'erreur moi-même quand j'écris ><
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Profil bloqué
15 août 2010 à 16:02
Merci pour ta reponse.

J'ai bien verifié la classe. C'est ce que j'ai marqué.

public function __constructor($post)

En utilisant google j'ai vu ce constructeur chez certains anglophones, mais aucune documentation !!!

En plus ça compile nickel par contre si on le remplace par "__construct" ça genère des erreurs ce qui veut dire qu'ils sont pas pareil.
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
15 août 2010 à 16:37
L'auteur du code appelle sans doute la méthode __constructor manuellement :
$object = new Classe();
$object->__constructor($param1, $param2, ...);


La méthode __construct est automatiquement appelée lors de l'instantiation de l'objet.
0
Profil bloqué
15 août 2010 à 17:10
Merci à toi Crillus. Ta reponse est claire, j'ai tout compris.

Donc comme constructeur par defaut on a le choix entre :

__constructor() , __construct()

si j'ai bien compris ils sont totalement identiques ?
Pour quoi le fait de remplacer l'un par l'autre ne donne pas le même resultat ?

Encore merci :))
0
Profil bloqué
15 août 2010 à 22:24
pour finir avion a raison :) merci à tous.
0