# 5.3.1 Getter und Setter

Es ist oftmals eine gute Lösung, wenn Eigenschaften nicht direkt gelesen oder geschrieben werden, sondern `private` sind und der Zugriff nur über sogenannte Getter- und Setter-Methoden erfolgt. Denn dies hat folgende Vorteile:

- Bevor eine Eigenschaft einen Wert zugewiesen bekommt, kann man prüfen, dass der neue Wert keinen "Datenmüll" enthält und der Wert dem Wertebereich entspricht (es sich also um einen gültigen Wert handelt).
- `public`-Eigenschaften können von überall gelesen und geschrieben werden. Oftmals möchte man aber den "schreibenden Zugriff" nicht von überall zulassen. So kann es Eigenschaften geben, die über einen Getter immer lesbar sind, bei denen aber schreibende Änderungen an Bedingungen geknüpft sind.
- Später werden wir auch sehen, dass es somit möglich ist, mit dem Beobachter-Pattern die Information der Wertänderung einer Eigenschaft an andere Programmteile weiterzuleiten.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    class Student
    {
        private $matrNumber = "1324345";
        private $phoneNumber = "keine Angabe";

        public function getMatriculationNumber(): string
        {
            return $this->matrNumber;
        }

        public function setPhoneNumber(string $newPhoneNumber): void
        {
            $this->phoneNumber = $newPhoneNumber;
        }

        public function getPhoneNumber(): string
        {
            return $this->phoneNumber;
        }
        ...
    }

Im gezeigten Beispiel kann man die Matrikelnummer `$matrNumber` zwar über `getMatriculationNumber()` auslesen, aber nicht ändern. Die Telefonnummer `$phoneNumber` hingegen kann man über die Methode `getPhoneNumber()` auslesen und über `setPhoneNumber()` auch ändern.

Anmerkung

Es gibt auch kritische Stimmen zur (umfangreichen) Verwendung von Gettern und Settern:

- Kritik von Martin Fowler und hier der gesamte Artikel.
- Kritische Betrachtung von Sebastian Gaul