A getterek és setterek előnyei az OOP-ban PHP-ben

Az előző leckében minden tulajdonsághoz készítettünk gettert és settert. Felmerülhet a kérdés, miért szükségesek ezek a bonyolultságok, hiszen gyakorlatilag ugyanazt az eredményt el lehetne érni, ha a tulajdonságokat nyilvánossá tennénk, nem pedig priváttá.

A dolog az, hogy a gettereknek és settereknek van előnyük: a tulajdonsághoz való hozzáférés előtt végezhetünk bizonyos ellenőrzéseket. Például a mi esetünkben a név és vezetéknév beállításakor ellenőrizhetjük, hogy az új érték nem üres sztring-e:

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;
    }
  }
?>

Ellenőrizzük, hogyan működik ez. Először hozzunk létre egy objektumot az osztályból:

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

Most próbáljunk meg helyes értéket beállítani:

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

És most próbáljunk meg helytelen értéket beállítani:

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

A Employee osztályban a kor setterében végezz ellenőrzést, hogy a kor 0 és 120 között legyen.

Задание 2

A Employee osztályban a fizetés getterében tedd meg, hogy a fizetés értékének olvasásakor annak végére egy dollárjel kerüljön.