Warum sollte ich function __construct()
anstelle von function className()
in PHP 5 verwenden?
Ich vermute, dass zu der Zeit, als die objektorientierte Funktionalität zu PHP hinzugefügt wurde, die Designer Python betrachteten.
Die __ magischen Methoden / Funktionen scheinen ein einheitliches Thema in PHP zu sein (einmal!). Ein Vorteil der Verwendung von __construct()
über ClassName()
als Konstruktor besteht darin, dass Sie den Konstruktor nicht aktualisieren müssen, wenn Sie den Namen der Klasse ändern.
Weil php5 mehr wie Python sein wollte.
Ich scherze, ich kid ...
Eine Standardmethode für Standardaktionen, wie die Konstruktion, ist eine vernünftige Lösung. Aus demselben Grund verwenden Sie in C # -Klassen beim Erweitern einer Klasse base
zum Aufrufen von Basisklassenkonstruktoren anstelle eines benannten Objekts: Sie vereinfachen den Code und erleichtern die Wartung.
Weil es mit der __destruct () -Methode und anderen speziellen Methoden vereinheitlicht wurde, die mit zwei Unterstrichen beginnen, zum Beispiel __get, __sleep, __serialize Ссылка
Dadurch können Sie den Konstruktor immer aus der super (base-) Klasse aufrufen, ohne dessen Namen kennen zu müssen. Dies ist sehr nützlich für die Klassenbaumpflege, da Sie nicht alle Klassen aktualisieren müssen, nur weil Sie Ihre Klassenbäume neu anordnen.
und ... nur raten .. Wenn alle Klassen ihre Konstruktoren identisch __construct () nennen, könnte theoretisch ein Konstruktor von einer Oberklasse ohne jede erforderliche Definition geerbt werden. Dies ist sinnvoll in Klassenbäumen, in denen es abstrakte abstrakte Klassen gibt, und in Konstrukten wie in Ziel C, wo Standardkonstruktorverhalten vollständig aus Klassenmetadaten abgeleitet wird und daher (im Prinzip!) Überhaupt keine Codierung benötigt.
Alte Frage, aber ich beiße, da noch niemand die eigentliche Frage beantwortet hat.
function className () ist ein Konstruktor im PHP4-Stil .
function __construct () ist ein Konstruktor im PHP5-Stil .
Sie sollten letzteres verwenden, weil ersteres veraltet ist und aus der Sprache entfernt werden kann.
Auch kann die erstere verschiedene PHP5 OO-Konzepte ignorieren oder auch nicht, wie zum Beispiel die Public / Private-Sichtbarkeitsoperatoren. Nicht, dass Sie den Konstruktor privat machen möchten, wenn Sie nicht die Singleton- oder Factory-Muster verwenden.