Zalety setterów i getterów w OOP w PHP

W poprzedniej lekcji zrobiliśmy dla każdej właściwości getter i setter. Może pojawić się pytanie, po co potrzebne są takie skomplikowania, przecież faktycznie tego samego efektu można osiągnąć, jeśli zrobić właściwości publicznymi, a nie prywatnymi.

Chodzi o to, że gettery i settery mają zalety: przed odwołaniem się do właściwości można wykonywać pewne sprawdzenia. Na przykład, w naszym przypadku przy zapisie imienia i nazwiska możemy sprawdzić, że nowa wartość nie jest pustym ciągiem znaków:

php<?php
  class User {
    private $name;
    private $surn;
    
    public function setName($name) {
      if (strlen($name) > 0) {
        $this->name = $name;
      } else {
        echo 'name is incorrect';
      }
    }
    
    public function setSurn($surn) {
      if (strlen($surn) > 0) {
        $this->surn = $surn;
      } else {
        echo 'surn is incorrect';
      }
    }
    
    public function getName() {
      return $this->name;
    }
    
    public function getSurn() {
      return $this->surn;
    }
  }
?>

Sprawdźmy, jak to działa. Na początek stwórzmy obiekt klasy:

php<?php
  $user = new User();
?>

Teraz spróbujmy zapisać prawidłową wartość:

php<?php
  $user->setName('john');
?>

A teraz spróbujmy zapisać nieprawidłową:

php<?php
  $user->setName(''); // błąd
?>
Задание 1

W klasie Employee w setterze wieku zrób sprawdzenie, że wiek powinien być od 0 do 120.

Задание 2

W klasie Employee w getterze pensji zrób tak, żeby przy odczycie pensji na koniec jej wartości był dodawany znak dolara.