Warum sollte ich function __construct()
anstelle von function className()
in PHP 5 verwenden?Warum verwendet PHP 5 __construct() anstelle von className() als Konstruktor?
Antwort
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.
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.
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.
Funktioniert '__autoload()' unabhängig davon, ob Sie '_construct()' oder 'className()' verwenden? –
Ich wünschte, C++ und Java verwendet die ctor()/dtor() Methodensignatur. : -/ –
@Klick Upvote Ja. __autoload() sollte sich nicht darum kümmern, welcher Stil des Konstruktors verwendet wurde. – Asaph
Weil es mit dem __destruct() -Methode und anderen speziellen Methoden vereinigt wurde mit zwei Unterstrichen zum Beispiel __get beginnen, __sleep, __serialize http://us2.php.net/manual/en/language.oop5.magic.php
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.
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.
- 1. Warum verwendet Rails 5 ApplicationRecord anstelle von ActiveRecord :: Base?
- 2. PHP - erweiterte __construct
- 3. Warum verwendet Fraktion __new__ anstelle von __init__?
- 4. Wofür wird ein Konstruktor in PHP verwendet?
- 5. Warum verwendet mmap() MAP_FAILED anstelle von NULL?
- 6. Warum verwendet UnderscoreJS toString.call() anstelle von typeof?
- 7. Warum verwendet numpy.r_ Klammern anstelle von Klammern?
- 8. Vector Reallocation verwendet Kopie anstelle von Move Konstruktor
- 9. kann Konstruktor nicht als geschützt oder privat definieren! Warum?
- 10. Codeigniter - php cli siehe nur __construct Funktion
- 11. php Konstruktor Vererbung
- 12. self :: vs className :: innerhalb static className Metoden in PHP
- 13. Rufen Eltern-Konstruktor vor Kind Konstruktor in PHP
- 14. PHP initialisieren Variable in __construct() vs Erklärung
- 15. erweitert __construct nicht funktioniert
- 16. PHP: String-Parameter zu __construct nicht korrekt übergeben
- 17. Warum nimmt Exception Throwable als Konstruktorparameter anstelle von Exception?
- 18. Kann ich eine abstrakte Klasse anstelle eines privaten __construct() beim Erstellen eines Singletons in PHP verwenden?
- 19. Warum verwendet LibGDX SpriteBatch Dreiecke anstelle von Quads?
- 20. Warum TCPDF anstelle von mpdf
- 21. Aufruf Eltern Konstruktor in PHP
- 22. Pass Argumente von Array in PHP Konstruktor
- 23. Warum verwendet Forth IF-Anweisung THEN ... anstelle von ENDIF?
- 24. Warum verwendet die Doktrin WHERE IN anstelle von LIMIT?
- 25. Warum verwendet die BuildConfig-Klasse Boolean.parseBoolean() anstelle von Literalwerten?
- 26. Warum verwendet Angular Material2 ViewEncapsulation.None anstelle von Emulated oder Native?
- 27. Warum Collections.sort merge sort anstelle von Quicksort verwendet?
- 28. Warum wird ** Kopf hier anstelle von * Kopf verwendet?
- 29. Verwendung von toString() anstelle von Konstruktor in JavaScript
- 30. Verwendet Html.TextBox Request.Params anstelle von Model?
@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
Tatsächlich war ich wirklich nur scherzhaft. Asaphs Antwort ist sicherlich viel hilfreicher. –