Przesłanianie metod rodzica w OOP w PHP

Klasa potomna może przesłonić metodę rodzica, tworząc metodę o tej samej nazwie. Spójrzmy na przykład. Załóżmy, że mamy następującą klasę rodzica:

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

Stwórzmy w klasie potomnej metodę o tej samej nazwie:

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

Zazwyczaj przesłanianie metod rodzica służy do zmiany lub rozszerzenia zachowania tej metody. W naszym przypadku dodajmy sprawdzanie długości imienia:

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

Upewnijmy się, że wywoływana jest właśnie przesłonięta metoda. Na początek stwórzmy obiekt klasy potomka:

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

Teraz wywołajmy naszą metodę, przekazując do niej poprawne wartości:

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

A teraz wywołajmy metodę, przekazując do niej niepoprawne wartości. W rezultacie zobaczymy wyrzucony wyjątek:

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

W klasie User zrób getter i setter wieku.

Задание 2

W klasie Employee przesłoń setter wieku i zrób w nim sprawdzenie, czy wiek jest od 18 do 65 lat.