Verwendung von Getter-Setter innerhalb der Klasse

8

Sollte man unter keinen Umständen Getter-Setter einer Klasse innerhalb der Klasse verwenden?

    
Argiropoulos Stavros 22.01.2011, 10:42
quelle

4 Antworten

7

Getter-Setter werden im Allgemeinen von außerhalb der Klasse verwendet, um direkt von innen auf die Felder zuzugreifen. Der Hauptvorteil / Zweck ist die Kapselung der Getter-Setter,

Wenn Ihre Getter-Setter einen logischen Code haben, dann benutzen Sie ihn.

zum Beispiel:

%Vor%

Siehe auch

Jigar Joshi 22.01.2011, 10:43
quelle
5

Ja, Getter und Setter sind nützlich. Da PHP Typhinweis für einfache Typen wie int oder string nicht unterstützt, können Sie nicht erzwingen, dass ein Wert vom richtigen Typ ist.

Mit einem Setter haben Sie immer die Möglichkeit, den eingestellten Wert zu überprüfen. Wenn ein Wert, der auf eine int-Eigenschaft festgelegt ist, kein int ist, können Sie angeben, ob die Eingabe typisiert oder ein Fehler ausgelöst werden soll, anstatt nur den falschen Wert zu akzeptieren.

Das macht das Debuggen und Pflegen Ihrer Anwendung viel einfacher. Es ist also eine gute Idee, Getter und Setter zu verwenden, auch wenn sie nicht viel Logik außer diesen Überprüfungen enthalten.

    
GolezTrol 22.01.2011 10:51
quelle
1

@GolezTrol

Es gibt kein PHP-Abzeichen zum Thema und Sie liegen falsch. Was Sie beschreiben, hat nichts mit Setter zu tun. Sie können den Parameter type (in PHP) erzwingen, indem Sie eine beliebige Methode verwenden, nicht nur einen Setter.

Sie können schreiben:

%Vor%

oder einfach:

%Vor%

Wie Sie sehen, brauchte ich keine Setter, um die Objekteigenschaften zu erzwingen.

Und Fehler in Setter zu werfen, nachdem der Variablentyp geprüft wurde, ist sowieso eine schlechte Idee. Es ist ein häufiger Fehler von Programmierern, die aus der statisch getippten Sprache in die dynamische Sprache wechseln.

Setter und Geter sind CONVENTION und sie erzwingen nichts! Heute verwenden wir sie normalerweise für die Erstellung von Plain Old Java Objects. (POJO - in PHP-Wort POPO) Es ist also nur eine Konvektion (Standard) für die Erstellung von Objekten, die zwischen Bibliotheken oder Projekten verwendet werden kann.

Sie können Setter mit Typprüfung oder was auch immer kombinieren, aber es macht sie nicht mehr als sie sind.

Über Verkapselung:

@ org.life.java - Jigar Joshi

  

"Der Hauptvorteil / Zweck ist   Verkapselung von Getter Setter, "

@ Peter Alexander

  

"Sie sollen die Getter verwenden   und Setzer fast überall,   einschließlich innerhalb "der Klasse. Wenn Sie   nicht, dann bist du potentiell   Einkapselung "" Getters und   Setter sind Verkapselung "

Falsch, falsch, falsch . Kapselung hat nichts mit Getter und Setter zu tun und es ist ein sehr häufiger Fehler. Ich weiß, dass es viele Artikel gibt, die es immer und immer wieder auf den Kopf stellen ...

Getters und Setter helfen nicht noch besser bei der Kapselung, sie können die Einkapselung unterbrechen. Sie tun dies, wenn Sie sie verwenden, um einige Daten vom Objekt zu erhalten, anstatt das Objekt zu bitten, mit seinen eigenen Daten etwas für Sie zu tun.

Encapsulation == Objekt übernimmt die volle Verantwortung für seine Daten und gibt keine Zeilendaten. Und Getter auf Privateigentum ist nicht viel mehr, als dieses Eigentum in der komplizierten Mode == Verkapselung der Bremse bekannt zu machen.

Chceck-Absatzkapselung: Ссылка oder Ссылка Nicht einmal ein Wort über Setter oder Getters ...

    
smentek 23.01.2011 09:02
quelle
0

Sie sollten die Getter und Setter fast überall einsetzen, auch innerhalb der Klasse. Wenn Sie dies nicht tun, können Sie möglicherweise die Kapselung aufheben, und noch schlimmer, Sie könnten Ihre Invarianten ungültig machen.

Als einfaches Beispiel in C ++:

%Vor%

Siehe den Fehler? transfer zieht Geld ab, erhöht aber m_withdrawals nicht. Dies hätte vermieden werden können, wenn es einfach withdraw aufgerufen hätte, anstatt das Guthaben manuell zu dekrementieren.

Gleiches gilt für Getter und Setter. Zum Beispiel ist es ziemlich üblich, Getter zu haben, die ihre Werte langsam initialisieren. Wenn eine andere Memberfunktion direkt auf das nicht initialisierte Member zugreift, erhalten Sie eine Nullzeiger-Dereferenzierung.

Grundsätzlich sollten Sie immer versuchen, die Getter und Setter zu verwenden, wenn sie die gewünschte Funktionalität bereitstellen. Je mehr Low-Level-Dinge Sie tun, desto mehr Low-Level-Bugs werden Sie haben. Es hat keinen Sinn Getter und Setter zu schreiben, wenn Sie sie nicht benutzen werden.

    
Peter Alexander 22.01.2011 10:53
quelle

Tags und Links