Warum hat Magento Methoden _construct und __construct?
Gibt es einen Grund, warum Magento hat einen _construct
und ein __construct
Methode? Warum wird die zusätzliche _construct
vorhanden??? Könnte irgendetwas dadurch erreicht, dass die zusätzliche _construct
Methode nicht erreicht werden, nur durch den Aufruf der parent-Konstruktor in der abgeleiteten Klasse?
Kommentar zu dem Problem
Könntest du ein Beispiel zeigen?
Fast jede Klasse in Magento erweitert die
Varien_Object
- Klasse. Dort ist der PHP - __construct
definiert, und da gibt es ein _construct
definiert. InformationsquelleAutor der Frage Nick | 2012-01-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beste Antwort, die ich finden kann: http://www.magentocommerce.com/boards/viewthread/76027/#t282659
Grundsätzlich der root-Ebene der Klasse (von der alle anderen Klassen Erben) implementiert
__construct
, die PHP ruft automatisch immer eine Klasse aufgebaut ist. Gerade jetzt, in dieser root-Ebene die Klasse ruft einfach_construct
enthält den eigentlichen Programmcode.Sagen, Sie haben dieses set-up:
PHP nicht automatisch rufen Sie die übergeordnete Klasse Konstruktoren, so
doSomethingReallyImportant
nie aufgerufen wird. Sie könnte verlangen, dass die Unterklasse Konstruktoren rufenparent::__construct()
, aber das ist einfach zu vergessen. So Magento hat Unterklassen überschreiben_construct
:PHP nicht erkennt einen Konstruktor in
SubClass
, so ruft esBaseClass
's Konstruktor. Dies ermöglichtBaseClass
zudoSomethingReallyImportant
vor dem Aufruf Unterklasse außer Kraft gesetzt_construct
.InformationsquelleAutor der Antwort benesch
Marco: es ist falsch, zu überschreiben
__construct()
Methode, wie dies in Magento. Der Grund ist - alle Klassen Erben vonVarien_Object
- und es hat diesen code:Mit der __construct Ihren code verwenden, diese Argumente nicht übergeben bekommen durch.
Sie haben wirklich zu verwenden Benesch - code:
Lesen Sie mehr dazu in Magento-Block Lifecycle-Methoden von Alan Storm
InformationsquelleAutor der Antwort PICher
Edit: sorry, übersehen die den Unterschied zwischen
_construct
und__construct
Ihre Frage ein. Ich denke, die Magento Programmierer versucht haben, um es einfacher zu machen, um der Konstruktor überschrieben, ohne das Risiko der eigenen Konstruktor nicht aufgerufen wird, nicht mehr. Die _construct Methode auf Varien_Object ist leer, also ist es egal, wenn es nicht aufgerufen von Unterklassen.Dies ist nur, wie PHP implementiert Konstruktoren und Destruktoren für Klassen. Es gibt nichts Magento-spezifische über es.
In den anderen Sprachen der Konstruktor ist in der Regel implementiert eine Methode mit dem gleichen Namen wie die Klasse selbst und der Konstruktor hat in der Regel eine tilde (~) vor den Namen der Methode baring den gleichen Namen wie die Klasse. Für einige Grund die PHP-Leute umgesetzt haben, ist es auf diese Weise, obwohl PHP scheint auch zu unterstützen, Konstruktoren und Destruktoren, die mit den Namen der Klasse (link).
Einer Klasse keinen Konstruktor und/oder Destruktor, vor allem, wenn Sie eine Unterklasse einer anderen Klasse. Wenn Sie dies tun, überschreiben Sie den Konstruktor oder Destruktor, dann müssen Sie zum Aufruf der Konstruktor oder Destruktor der Klasse überschrieben manuell durch den Aufruf auf
parent::
wie:InformationsquelleAutor der Antwort Marco Miltenburg