pourquoi avons-nous encore besoin constructeur parent lorsque le contrôleur de classe s'étend un contrôleur de parent?
Je suis un débutant dans CodeIgniter et de la programmation orientée objet. J'ai été la lecture d'une page de tutoriel CI ici. J'ai trouvé quelque chose qui a fait une question dans mon esprit.
Regardez ce code:
<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
}
Je pense que si nous avons fait une classe qui extends CI_Controller, nous supposons qu'il doit avoir toutes les méthodes et propriétés de la classe parente (si l'on peut les remplacer). Alors, pourquoi il n'y a parent::__construct();
dans le code?
OriginalL'auteur Mohammad Saberi | 2013-02-25
Vous devez vous connecter pour publier un commentaire.
__construct()
est la méthode constructeur de la classe. Il fonctionne si vous déclarez une nouvelle instance de l'objet. Cependant, il n'exécutez le constructeur de lui-même, et non pas de ses parents. Par exemple:Dans ce cas, si vous avez besoin d'exécuter Une classe du constructeur lorsque $obj est déclaré, vous aurez besoin d'utiliser
parent::__construct()
:Dans CodeIgniter, cette ligne s'étend le constructeur dans CI_Controller. Cette méthode constructeur doit vous avoir aidé votre contrôleur de codes d'une certaine façon. Et vous avez juste envie de faire tout pour vous.
class B extends A
est correctAinsi nous devons faire de même pour d'autres méthodes dans de nouvelles classes qui ont une méthode similaire dans la classe parent et souhaitez utiliser leurs fonctionnalités parents? ou c'est juste pour
__construct()
classes ?Ya droit. Corrigés. Merci.
Cela dépend du cas réel. Si vous n'avez pas de remplacer le parent de la méthode, vous n'avez pas besoin de faire
parent::some_method()
. Même si vous ne remplacent parent méthode, vous n'avez pas à. Le modèle de fournir les moyens pour vous à la réutilisation de code et de gagner du temps. Ce n'est pas une restriction.OriginalL'auteur Koala Yeung
Pour répondre à votre question directement à partir du Code Iginiter documentation:
http://ellislab.com/codeigniter/user-guide/general/controllers.html#constructors
OriginalL'auteur Chris M
Extension utilisée pour toutes les classes.
__construct() utilisé pour la classe que vous utilisez.
Les Classes qui ont un constructeur appel de la méthode cette méthode sur chaque objet nouvellement créé, de sorte qu'il est adapté pour toute initialisation de l'objet peut avoir besoin avant de l'utiliser.
OriginalL'auteur Erman Belegu
Je crois que le besoin d'appeler le constructeur parent/méthode est un odeur de code, connu comme Appel super. En plus de l'erreur de la sensibilité (l'oubli de cet appel, vous pouvez obtenir des résultats inattendus), c'est de procédure au lieu de la programmation orientée objet. Après tout, l'ordre des instructions peut entraîner des résultats inattendus.
Lire la suite ici: https://martinfowler.com/bliki/CallSuper.html
OriginalL'auteur schellingerht
L'héritage est utilisé via le mot-clé
extends
. La classe parent pourrait être la mise en certaines valeurs lors de son constructeur est appelé. Si le constructeur parent n'est pas appelé les valeurs ne sont pas définies et les enfants de la classe ne sera pas obtenir ces valeurs.Exemple:
Ici, la classe
Child
l'écho de rien si le constructeur parent n'a pas été appelé.Donc dans Codeigniter la classe parent est probablement le réglage de certaines valeurs qui sont de l'aide à ses enfants lorsque vous appelez son constructeur et ces valeurs ne sont disponibles que pour ses enfants, si le parent constructeur est appelé.
OriginalL'auteur Robert Rocha