Get- und Set-Methoden
In der Objektorientierte Programmierung werdet ihr häufig den Einsatz von Get- und Set-Methoden finden. Auch wenn deren Einsatz zu Beginn unnötig kompliziert aussieht und viele Programmieranfänger auf diese gerne verzichten, stellen diese Methoden eine elegante Art- und Weise dar, wie der Zugriff auf die Klasse funktioniert.
Inhaltsverzeichnis
Get- und Set-Methode definieren
Der Sinn von Get- und Set-Methoden ist es, eure internen Klassenvariablen gegen Zugriff von außen zu schützen. Dies geht, indem ihr die Sichtbarkeit der Klassenvariablen auf entweder private oder protected setzt.
<?php class User { protected $email; protected $password; public function getEmail() { return $this->email; } public function setEmail($email) { $this->email = $email; } public function getPassword() { return $this->password; } public function setPassword($password) { $this->password = $password; } ?>
Bei dieser einfachen Klassen habt ihr die beiden Klassenvariablen $email und $password. Da deren Sichtbarkeit auf protected gesetzt sind, kann auf diese von außen nicht Zugriffen werden. Dafür wird je Klassenvariable eine entsprechende Get-Methode definiert (getEmail und getPassword). Diese gibt den Wert entsprechend zurück.
Ebenfalls wird eine Set-Methode definiert (setEmail und setPassword). Die Set-Methode erhält als Argument den neuen Wert für die Variable und aktualisiert die Variable.
Zugriff auf Klassenvariablen
Nutzt man Get- und Set-Methoden, so sieht der Zugriff auf diese Variablen etwas anders aus:
1 2 3 4 5 6 7 |
<?php $user = new User(); $user->setPassword("geheim"); echo "Die E-Mail-Adresse: ".$user->getEmail(); ?> |
Statt also direkt auf die Klassenvariablen zuzugreifen, wird stattdessen immer die Get- oder Set-Methode verwendet.
Wieso sollte man Get- und Set-Methoden nutzen?
Erstmal sieht der Einsatz der Get- und Set-Methoden unnötig kompliziert aus. Der große Vorteil ist aber, dass ihr den Zugriff zentral in der Klasse kontrollieren könnt.
Angenommen ihr möchtet sicher gehen, dass die $email-Klassenvariable stets eine gültige E-Mail-Adresse enthält. Wenn ihr direkt auf diese Klassenvariable von außen zugreift, so müsstet ihr euren gesamten Code durchgehen und schauen wo einem User-Objekt eine E-Mail-Adresse zugewiesen wird. Dieses kann bei großen Projekten recht aufwendig sein.
Mittels den Get- und Set-Methoden könnt ihr die Überprüfung zentral bündeln:
<?php class User { protected $email; public function getEmail() { return $this->email; } public function setEmail($email) { if(filter_var($email, FILTER_VALIDATE_EMAIL)) { //eine gültige E-Mail-Adresse wurde übergeben $this->email = $email; return true; } return false; } } $user = new User(); $neue_email = "falsche-email-adresse"; if($user->setEmail($neue_email)) { echo "Die E-Mail-Adresse wurde gespeichert"; } else { echo "Die E-Mail-Adresse konnte nicht gespeichert werden. Ggf. ist diese ungültig"; } ?>
Mittels Get- und Set-Methoden könnt ihr ebenfalls Klassenvariablen definieren, die Read-Only sind, indem ihr die Set-Methode weglasst. Die ID eines Users sollte man z.B. auslesen können, aber nicht verändern können.
Ebenfalls kann man damit Write-Only Klassenvariablen erstellen, indem die Get-Methode weggelassen wird. Zum Beispiel kann man das Passwort verändert, ein Auslesen des Passworts soll aber nicht möglich sein.
Autor: Nils Reimers