Prepisovanie metód rodiča v OOP v PHP

Trieda-potomok môže prepísať metódu rodiča vytvorením metódy s rovnakým menom. Pozrime sa na príklad. Nech máme nasledujúcu rodičovskú triedu:

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

V triede-potomkovi vytvorme metódu s rovnakým menom:

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

Spravidla sa prepisovanie metód rodiča používa na to, aby sa zmenilo alebo doplnilo správanie tejto metódy. V našom prípade pridajme kontrolu dĺžky mena:

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

Presvedčme sa, že volá sa práve prepísaná metóda. Najprv vytvorme objekt triedy potomka:

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

Teraz zavolajme našu metódu, odovzdajúc jej korektnú hodnotu:

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

A teraz zavolajme metódu, odovzdajúc jej nekorektnú hodnotu. V dôsledku uvidíme vyvolanú výnimku:

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

V triede User vytvorte getter a setter veku.

Задание 2

V triede Employee prepíšte setter veku a vytvorte v ňom kontrolu, že vek je od 18 do 65 rokov.