Rishkrimi i metodave të prindit në OOP në PHP

Një klasë e trashëguar mund të rishkruajë metodën e prindit, duke krijuar një metodë me të njëjtin emër. Le të shohim në një shembull. Le të themi se kemi këtë klasë prind:

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

Le të krijojmë në klasën e trashëguar një metodë me të njëjtin emër:

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

Në përgjithësi, rishkrimi i metodave të prindit nevojitet për të ndryshuar ose plotësuar sjelljen e atij metode. Le të shtojmë në rastin tonë një kontroll të gjatësisë së emrit:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        $this->name = $name;
      } else {
        echo 'gabim në emrin e studentit';
      }
    }
  }
?>

Le të sigurohemi që po thirret pikërisht metoda e rishkruar. Së pari le të krijojmë një objekt të klasës së trashëguar:

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

Tani le ta thërrasim metodën tonë, duke i kaluar asaj një vlerë korrekte:

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

Dhe tani le ta thërrasim metodën, duke i kaluar asaj një vlerë të pasaktë. Si rezultat do të shohim një përjashtim të hedhur:

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

Në klasën User bëni getter dhe setter për moshën.

Задание 2

Në klasën Employee rishkruani setter për moshën dhe bëni në të kontrollin që mosha të jetë nga 18 deri në 65 vjet.