Přepsání metod rodiče v OOP v PHP

Třída potomek může přepsat metodu rodiče vytvořením metody se stejným názvem. Podívejme se na příklad. Předpokládejme, že máme následující rodičovskou třídu:

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

Vytvořme v třídě potomkovi metodu se stejným názvem:

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

Přepsání metod rodiče obvykle slouží k tomu, aby se změnilo nebo doplnilo chování této metody. V našem případě přidejme kontrolu délky jména:

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

Přesvědčme se, že je volána právě přepsaná metoda. Nejprve vytvořme objekt třídy potomka:

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

Nyní zavolejme naši metodu, předáme-li jí korektní hodnotu:

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

A nyní zavolejme metodu, předáme-li jí nekorektní hodnotu. Výsledkem uvidíme vyhozenou výjimku:

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

Ve třídě User vytvořte getter a setter věku.

Задание 2

Ve třídě Employee přepište setter věku a proveďte v něm kontrolu, že věk je od 18 do 65 let.