Suprascrierea metodelor părinților în OOP în PHP

O clasă copil poate suprascrie metoda părintelui, creând o metodă cu același nume. Să ne uităm la un exemplu. Să presupunem că avem următoarea clasă părinte:

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

Să creăm în clasa copil o metodă cu același nume:

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

De obicei, suprascrierea metodelor părintelui este necesară pentru a modifica sau completa comportamentul acestei metode. În cazul nostru, să adăugăm o verificare a lungimii numelui:

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

Să ne asigurăm că este apelată exact metoda suprascrisă. Pentru început, să creăm un obiect al clasei copil:

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

Acum să apelăm metoda noastră, transmițându-i o valoare corectă:

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

Și acum să apelăm metoda, transmitându-i o valoare incorectă. Ca rezultat, vom vedea excepția aruncată:

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

În clasa User faceți un getter și un setter pentru vârstă.

Задание 2

În clasa Employee suprascrieți setter-ul vârstei și faceți în el o verificare că vârsta este de la 18 până la 65 ani.