-
15.07.2014, 15:46 #1
Globale Variable ohne Kapselung
Hi,
ich habe in einer Klasse eine globale Variable auf die ich von außen zugreifen möchte. Kapselung ist eigentlich nicht nötig daher dachte ich es wäre sinnvoll sie einfach wegzulassen, also
PHP-Code:class Meine_Klasse{
public $user_data;
}
PHP-Code:class Meine_Klasse{
private $user_data;
public function get_user_data(){
return $user_data;
}
public function set_user_data($new_data){
$this->user_data = $new_data;
}
}
PHP-Code:$meine_klasse = new Meine_Klasse;
$user_data = $meine_klasse->get_user_data();
echo $user_data["name"];
PHP-Code:$meine_klasse = new Meine_Klasse;
echo $user_data["name"];
Ich sehe einfach keinen Sinn wieso man pauschal immer kapseln sollte obwohl es nichts zu kapseln gibtMeine Tochter neulich im Zoo in der Arktisabteilung: "Guck mal Papi, da sind Linuxe!"
-
18.07.2014, 14:35 #2
- Registriert seit
- 17.07.2014
- Beiträge
- 50
Thanked 26 Times in 16 PostsAW: Globale Variable ohne Kapselung
Ich denke es ist Geschmackssache...
Zum einen hat man was damit zu tun, was man in die Variable speichert. Ich zum teil nutze eine Variable für die MySQL Daten, und erlaube da nicht einfach per direkten Zugriff darauf zu schreiben. PDO::FETCH_OBJECT gefällt mir nicht so, daher diese Variante.
Aber auch hat das was mit Datenintegrität zu tun. Wenn du eine Variable public machst, kannst du überall im Code diese verändern. Gerade in deinem Beispiel Namen sehe ich das eher als kritisch an, zumal das ja nichts ist, was man ständig ändert. Da ist z.B. eine Setter FUnktion nützlich, damit eine Änderung 1. nicht ausversehen und 2. vollständig durchgeführt werden. z.B. beim Ändern des Namens dann ein DB-Update.
Das mag am Anfang vielleicht garnicht geplant sein, aber wenn man es von Anfang an mit Gettern/Settern macht ist es am Ende übersichtlicher, sauberer und sicherer.
//Edit:
Eine Variable in einer Klasse ist niemals global, da sie nur im Scope ihre gültigkeit hat. Simmulieren könntest du es höchstens mit einer Klassenkonstante/StaticGeändert von BeTwo (18.07.2014 um 14:36 Uhr)
-
18.07.2014, 15:02 #3
AW: Globale Variable ohne Kapselung
Den Scope einer Variable kann man im Nachhinein großzügiger gestalten, ohne große Probleme. Aber das spätere Einschränken des Scopes wird deutlich aufwändiger, speziell wenn die entsprechende Variable häufig genutzt wird.
Kurz: Private/Protected -> Public ist einfach. Public -> Private/Protected kann Aufwand hervorrufen.
Wie ich in einem anderen Thema von dir bereits erwähnt habe, sollte man den Scope grundsätzlich so klein wie möglich halten. Getter und Setter sind da leider ein notwendiges Übel in vielen Sprachen, aber es gibt glücklicherweise auch andere Sprachen, dessen pfiffige Entwickler zumindest syntaktischen Zucker reingehauen haben.
An der Namensgebung (user_data) in deinem kleinen Codeausschnitt lässt sich vermuten, dass es sich um eine Datenhaltungsklasse handelt. Wenn du dort einen Wert änderst, findet sich in deinem Programm doch sicher das ein oder andere Objekt, das über diese Änderung informiert werden möchte, oder nicht? Zum Beispiel die Präsentationsschicht. Möchtest du es jedes Mal von Hand machen, wenn du den Wert änderst, oder möchtest du diese Benachrichtigung nur einmal herunter tippen und bei jeder Wertänderung den Setter die Arbeit machen lassen? Ich hoffe, du tendierst zu Letzterem.
Ähnliche Themen
-
Cro ohne Maske
Von Mr.Bombastic im Forum Musik ♫Antworten: 36Letzter Beitrag: 26.06.2014, 00:15 -
C# Fragen: Variable außerhalb von If nicht verfügbar
Von Gast78236 im Forum AndereAntworten: 5Letzter Beitrag: 31.12.2013, 15:01 -
[Frage]Bildausgabe mit Variable als Bildname (Php/Html)
Von Marvin im Forum PHPAntworten: 2Letzter Beitrag: 19.03.2013, 19:35 -
Mac OS X ohne CD formatieren?
Von MaskuL1n im Forum OS XAntworten: 1Letzter Beitrag: 06.12.2012, 15:17
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.