Preklapanje metoda roditelja u OOP u PHP

Klasa dete može da preklopi metod roditelja, kreirajući metod sa istim imenom. Pogledajmo primer. Neka imamo sledeću roditeljsku klasu:

php<?php
  class User {
    private $name;
    
    public function setName($name) {
      $this->name = $name;
    }
    public function getName() {
      return $this->name;
    }
  }
?>

Hajde da u klasi detetu kreiramo metod sa istim imenom:

php<?php
  class Student extends User {
    public function setName($name) {
      
    }
  }
?>

U pravilu, preklapanje metoda roditelja je potrebno da bi se promenilo ili dopunilo ponašanje tog metoda. Hajde da u našem slučaju dodamo proveru dužine imena:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        $this->name = $name;
      } else {
        echo 'student name error';
      }
    }
  }
?>

Uverimo se da se poziva baš preklopljeni metod. Za početak kreirajmo objekat klase deteta:

php<?php
  $student = new Student;
?>

Sada pozovimo naš metod, prosledivši u njega korektnu vrednost:

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

A sada pozovimo metod, prosledivši u njega nekorektnu vrednost. Kao rezultat videćemo izbačeni izuzetak:

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

U klasi User napravite geter i seter za godine.

Задание 2

U klasi Employee preklonite seter za godine i napravite u njemu proveru da li su godine između 18 i 65 godina.