2009-05-15 11 views
1

Ich bin neu in der objektorientierten Programmierung und schreibe einige meiner ersten Klassen für eine PHP-Anwendung.Korrekte Verwendung von 'Konstrukt' beim Entwerfen von Klassen

In einigen der einfacheren Klassen, erkläre ich eine function __construct(), und innerhalb dieser Funktion, rufen Sie bestimmte Klassenmethoden. In einigen Fällen stelle ich fest, dass ich die Klasse in meiner App instanziiere und nichts mit dem resultierenden Objekt machen muss, da die Klasse __construct() die Methoden aufgerufen hat, die ihre Arbeit gemacht haben und mir damit nichts mehr zu tun haben.

Das fühlt sich einfach nicht richtig für mich an. Scheint doof, dass ich ein neues Objekt habe, mit dem ich nie etwas mache.

Noch einmal, ich betone das ist nur der Fall für einige meiner einfacheren Klassen. In den komplizierteren verwende ich Klassenmethoden über das Objekt und außerhalb von __construct().

Muss ich die Art, wie ich Dinge codiere, neu überdenken, oder bin ich ok?

Antwort

4

Nun, der Konstruktor wird verwendet, um eine neue Instanz einer Klasse zu erstellen und alle notwendigen Setup für diese Klasse zu tun. Wenn Sie nur die Klasse erstellen und sie verlassen, scheint das eine Verschwendung zu sein. Warum nicht beispielsweise statische Funktionen in der Klasse als organisatorisches Werkzeug verwenden und sie nur aufrufen (oder eine Funktion, die sie aufruft), anstatt eine neue Instanz zu konstruieren, die Sie nie benutzen werden?

+0

Verdammt, du hast mich geschlagen, ich wollte gerade dasselbe sagen. xD –

+0

Ha, das war ein wiederkehrendes Problem für mich. Ich werde immer zu den Fragen geschlagen, die ich beantworten kann. : P Ich hatte nur einmal Glück! : D – Annath

2

Das fühlt sich einfach nicht richtig an. Scheint doof, dass ich ein neues Objekt habe, mit dem ich nie etwas mache.

Ja, das sollte eine rote Fahne heben.

Im Allgemeinen sollten Konstruktoren keine Nebenwirkungen haben; Sie dienen dazu, den Zustand des Objekts zu initialisieren - nicht für etwas anderes. Es gibt natürlich Ausnahmen von dieser Regel, aber im Allgemeinen ist es eine gute Richtlinie. Sie sollten auch auf schwere Berechnungen im Konstruktor verzichten. Verschieben Sie das stattdessen in eine Methode.

Side effects sind viele Dinge - Änderungen an globalen Variablen oder statischen (Klasse) Variablen; Ausgabe an die Umgebung (Zum Beispiel Aufrufe an print(), header() oder exit()); ruft eine Datenbank oder einen anderen externen Dienst auf und ändert sogar den Zustand anderer Objekte.

Eine nebenwirkungsfreie Funktion wird auch als "reine" Funktion bezeichnet - im Gegensatz zu einer Prozedur, die eine Nebenwirkung hat. Es ist eine gute Methode, reine Funktionen explizit von Prozeduren zu trennen (und vielleicht sogar als solche zu bezeichnen).

Verwandte Themen