Переопределение методов родителя в ООП в 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 лет.