2009-10-06 11 views

Antwort

2

Meine Vermutung wäre, dass durch die Zeit, die objektorientierte Fähigkeit zu sein wurde Zu PHP hinzugefügt, schauten sich die Designer Python an.

+5

@Click Upvote Interessant, dass Sie diese als richtige Antwort ausgewählt haben. Es beantwortet nicht einmal technisch Ihre Frage "Warum sollte ich Funktion __construct() anstelle von Funktion className() in PHP 5 verwenden?" – Asaph

+1

Tatsächlich war ich wirklich nur scherzhaft. Asaphs Antwort ist sicherlich viel hilfreicher. –

4

Weil php5 mehr wie Python sein wollte.

I kid, I kid ...

eine Standardmethode für Standardaktionen, wie 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. Dies vereinfacht den Code und erleichtert die Wartung.

27

Die __ magischen Methoden/Funktionen scheinen ein einheitliches Thema in PHP zu sein (für einmal!). Ein Vorteil der Verwendung von __construct() über ClassName() als Konstruktor ist, dass Sie den Konstruktor nicht aktualisieren müssen, wenn Sie den Namen der Klasse ändern.

+2

Funktioniert '__autoload()' unabhängig davon, ob Sie '_construct()' oder 'className()' verwenden? –

+1

Ich wünschte, C++ und Java verwendet die ctor()/dtor() Methodensignatur. : -/ –

+0

@Klick Upvote Ja. __autoload() sollte sich nicht darum kümmern, welcher Stil des Konstruktors verwendet wurde. – Asaph

1

Auf diese Weise können Sie den Konstruktor immer aus der Klasse super (base) 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 benennen __construct(), theoretisch könnte ein Konstruktor von einer Oberklasse ohne eine 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 das Verhalten von Standardkonstruktoren vollständig von Klassenmetadaten abgeleitet ist und daher (im Prinzip!) Überhaupt keine Codierung benötigt.

0

Alte Frage, aber ich werde beißen, da niemand tatsächlich die eigentliche Frage beantwortet hat.

Funktion className() ist ein PHP4-style constructor.

Funktion __construct() ist ein PHP5-style constructor.

Sie sollten letzteres verwenden, weil ersteres veraltet ist und möglicherweise aus der Sprache entfernt wird.

Auch kann die erstere verschiedene PHP5 OO-Konzepte, wie die öffentlichen/privaten Sichtbarkeitsoperatoren, ignorieren oder nicht ignorieren. Nicht, dass Sie den Konstruktor privat machen möchten, wenn Sie nicht die Singleton- oder Factory-Muster verwenden.

Verwandte Themen