Ülekatstud meetodi kutsumine OOP-s PHP-s

Ülekirjutamisel kaotab lapsklass juurdepääsu ülekatstud meetodile vanemas. Siiski on sellele võimalik juurde pääseda. Seda tehakse kasutades võtmesõna parent, mis viitab vanemaklassile.

Vaatame näidet, mil võib olla vajalik juurdepääs vanema meetodile. Olgu meil järgmine vanemaklass:

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

Oletame, et me laste klassis kirjutasime vanema meetodi üle:

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

Võib märgata, et ülekatstud meetodis teostatakse tingimuse korral tegelikult vanema meetodi kood. Tekib mittevajalik koodi dubleerimine.

Sellest saab lahti, kui kutsuda vanema meetodit. Teeme selle:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        parent::setName($name); // vanema meetod
      } else {
        echo 'õpilase nime viga';
      }
    }
  }
?>
Задание 1

Antud on järgmine kood:

php<?php
  class User {
    private $age;
    
    public function setAge($age) {
      if ($age >= 0) {
        $this->age = $age;
      } else {
        echo 'vaja vanust üle 0';
      }
    }
  }
  
  class Employee extends User {
    public function setAge($age) {
      if ($age <= 120) {
        if ($age >= 0) {
          $this->age = $age;
        } else {
          echo 'vaja vanust üle 0';
        }
      } else {
        echo 'vaja vanust alla 120';
      }
    }
  }
?>

Klassis Employee parandage ja lihtsustage vanuse setterit, kasutades vanema originaalset meetodit.