Difference entre __constructor et _construct
Résolu
Profil bloqué
-
Crillus Messages postés 192 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Difference entre __constructor et _construct
- Différence entre tcp et udp - Guide
- Difference entre million et milliard - Accueil - Technologies
- Difference entre mode avion et donnees mobiles - Guide
- Difference entre mo et mb - Forum Matériel & Système
- Difference actif et en ligne messenger - Forum Facebook Messenger
8 réponses
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()
Ç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()
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.
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.
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").
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.
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.
Et je m'excuse pour mon erreur avec la fonction __construct() , je fait souvent l'erreur moi-même quand j'écris ><
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
L'auteur du code appelle sans doute la méthode __constructor manuellement :
La méthode __construct est automatiquement appelée lors de l'instantiation de l'objet.
$object = new Classe(); $object->__constructor($param1, $param2, ...);
La méthode __construct est automatiquement appelée lors de l'instantiation de l'objet.
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 :))
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 :))