Prednosti setera i getera u OOP-u u PHP

U prethodnoj lekciji smo napravili za svako svojstvo geter i seter. Može se postaviti pitanje, čemu su potrebne takve složenosti, jer se zapravo istog efekta može postići ako se svojstva učine javnim, a ne privatnim.

Stvar je u tome što geteri i seteri imaju prednost: pre pristupa svojstvu može se izvršiti neka provera. Na primer, u našem slučaju pri upisu imena i prezimena možemo proveriti, da nova vrednost nije prazan string:

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

Hajde da proverimo kako ovo radi. Za početak, kreirajmo objekat klase:

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

Sada pokušajmo da upišemo ispravnu vrednost:

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

A sada pokušajmo da upišemo neispravnu:

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

U klasi Employee u seteru za godine napravite proveru da godine moraju biti od 0 do 120.

Задание 2

U klasi Employee u geteru za platu uradite tako da pri čitanju plate na kraj njene vrednosti bude dodatan znak dolara.