Пренаписване на родителски методи в ООП в PHP

Дъщерният клас може да пренапише метод на родителя, като създаде метод със същото име. Нека разгледаме пример. Да предположим, че имаме следния родителски клас:

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

Нека в дъщерния клас създадем метод със същото име:

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

Обикновено пренаписването на методи на родителя се използва, за да се промени или допълни поведението на този метод. В нашия случай нека добавим проверка на дължината на името:

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

Нека се уверим, че се извиква именно пренаписаният метод. Първо, нека създадем обект от дъщерния клас:

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

Сега нека извикаме нашия метод, като му подадем коректна стойност:

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

А сега нека извикаме метода, като му подадем некоректна стойност. В резултат ще видим хвърлено изключение:

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

В класа User създайте гетър и сетър за възрастта.

Задание 2

В класа Employee пренапишете сетъра за възраст и направете в него проверка, че възрастта е от 18 до 65 години.