Ich begann mit der Formulierung einer Frage: "Was ist der beste Weg, Komponententests an einem Konstruktor durchzuführen (zB __construct() in PHP5)", aber beim Durchlesen der verwandten Fragen sah ich mehrere Kommentare, die darauf hindeuten Das Festlegen von Membervariablen oder Durchführen komplizierter Operationen im Konstruktor sind keine Nos.Was macht man am besten nicht in einem Konstruktor?
Der Konstruktor für die fragliche Klasse nimmt einen Parameter, führt einige Operationen darauf aus (stellt sicher, dass er einen Sniff-Test besteht und wandelt ihn bei Bedarf um) und speichert ihn dann in einer Membervariablen.
Ich dachte, die Vorteile der es auf diese Weise tun, waren:
1), dass Client-Code immer sicher sein würde, einen Wert für diese Membervariable haben, wenn ein Objekt dieser Klasse instanziiert wird, und
2) spart einen Schritt in Client-Code (von denen denkbar verpasst) sein könnte, zum Beispiel
$Thing = new Thing;
$Thing->initialize($var);
wenn wir das einfach tun konnten
und damit fertig sein.
Ist dies ein No-No? Wenn ja warum?
In diesem Fall würde ich eher in einer Instanz von dbclass passieren, oder es als Singleton verwenden, anstatt zu erweitern die Klasse selbst. – Ross
Ja, es gibt Möglichkeiten, aber das ist nur ein Beispiel. –
Wenn Sie diese Funktionalität nicht möchten, können Sie den Konstruktor im Benutzerobjekt überschreiben. Auch einige Sprachen, wie C#, erben den Konstruktor überhaupt nicht. –