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