|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
Un débat vient de naître sur les listes de Zend Framework : faut-il utiliser __construct() ou bien init() dans un contrôleur d'action ? Pourquoi l'un plutôt que l'autre ? La réponse apportée par la majorité des participants est favorable à init(). Cependant, cette méthode est déclarée avec une visibilité "public", ce qui n'a pas d'intérêt puisqu'elle est systématiquement appelée depuis le contrôleur lui-même. Il a donc été suggéré de la rendre protected dans une version ultérieure. Si la méthode Zend_Controller_Action::init() devient protected, elle deva être renommée en _init(). En parallèle, Lars Strojny est intervenu pour déconseiller l'existence d'une méthode init(), argumentant que cette méthode a le même objectif que __construct()... Citation:
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
|
00
|
|
|
#2 |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 183 ![]() |
Personnellement; je trouve qu'une méthode doit-être utilisée que si elle apporte quelque chose de confortable et un réel +.
dans le cas du init(), cette méthode apporte-elle quelques choses de plus. Si la réponse est non, alors __construct() devrais-être utilisé en priorité.
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
00
|
|
|
#3 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Ok, prenons le problème par l'autre bout.
Actullement, la méthode __construct() des contrôleurs est réservée par le framework lui-même. En tant que développeur utilisant le framework, il nous est déconseillé d'utiliser __construct() à cause de sa complexité. Nous avons donc à notre disposition init(), une méthode appelée tout à la fin de __construct(), ce qui revient donc au même. Si je définis un contrôleur d'actions My_Controller_Action dérivé de Zend_Controller_Action et qui me sert de base pour tous mes propres contrôleurs d'action, j'utilise la méthode init() comme constructeur. Par extension, lorsque je définis un contrôleur d'action final dans mon appli, quelle méthode dois-je utiliser pour personnaliser à nouveau le constructeur ? __construct() n'est plus accessible et init() est déjà utilisé. Dois-je surcharger init() en appelant parent::init() ? En ce cas, pourquoi ne pas le faire avec __construct() ? Par souci d'homogénéité, je pourrais donc déclarer un niveau supplémentaire de constructeur : mettons setup()... Ce qui me donne trois méthodes pour la même opération. C'est sans doute cela que Lars voulait mettre en avant.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#4 |
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 183 ![]() |
En même temps, pour récupérer l'objet ancêtre de __construct et en hériter, tu dois appeler parent::__construct.
tu ne dois donc pas redéfinir, ni surcharger cette méthode, sauf si tu veux modifier explicitement cette méthode. Idem pour init();
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
Je me suis souvent demandé pourquoi init() n'était pas une méthode protégée. J'y vois un seul argument, un développeur n'ose pas vraiment surcharger une classe protégée d'un framework. Techniquement parlant, il est plus logique qu'elle soit protégée.
Utiliser le constructeur ou utiliser une fonction d'initialisation a toujours été un débat dans la programmation orienté objet. J'hésite même à parler de troll.
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com