Difference entre __constructor et _construct

Résolu
Profil bloqué -  
Crillus Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   -
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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   Statut Membre Dernière intervention   563
 
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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   Statut Membre Dernière intervention   563
 
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é
 
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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é
 
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é
 
pour finir avion a raison :) merci à tous.
0