Override dei metodi padre in OOP in PHP

Una classe figlia può sovrascrivere un metodo del padre, creando un metodo con lo stesso nome. Diamo un'occhiata a un esempio. Supponiamo di avere la seguente classe genitore:

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

Creiamo un metodo con lo stesso nome nella classe figlia:

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

In genere, la sovrascrittura dei metodi del padre serve per modificare o integrare il comportamento di tale metodo. Nel nostro caso, aggiungiamo un controllo sulla lunghezza del nome:

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

Assicuriamoci che venga chiamato proprio il metodo sovrascritto. Per prima cosa, creiamo un oggetto della classe figlia:

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

Ora chiamiamo il nostro metodo, passandogli un valore corretto:

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

Ora chiamiamo il metodo, passandogli un valore non corretto. Come risultato, vedremo un'eccezione generata:

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

Nella classe User create un getter e un setter per l'età.

Задание 2

Nella classe Employee sovrascrivete il setter dell'età e aggiungete un controllo che verifichi che l'età sia compresa tra 18 e 65 anni.