Yliluokan metodien ylikirjoittaminen OOP:ssa PHP:ssä

Aliluokka voi ylikirjoittaa yliluokan metodin luomalla metodin samalla nimellä. Katsotaanpa esimerkkiä. Oletetaan, että meillä on seuraava yliluokka:

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

Luodaanpa aliluokassa samaniminen metodi:

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

Yleensä yliluokan metodien ylikirjoittaminen tarvitaan sen metodin käyttäytymisen muuttamiseksi tai täydentämiseksi. Lisätäänpä meidän tapauksessamme pituustarkistus nimelle:

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

Varmistetaan, että kutsutaan nimenomaan ylikirjoitettua metodia. Aluksi luodaan olio aliluokasta:

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

Nyt kutsutaan metodia, antamalla sille oikea arvo:

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

Ja nyt kutsutaan metodia antamalla sille väärä arvo. Lopputuloksena näemme heitetyn poikkeuksen:

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

Luokassa User tee ikä-getteri ja -setteri.

Задание 2

Luokassa Employee ylikirjoita ikä-setteri ja tee siihen tarkistus, että ikä on 18 ja 65 vuoden välillä.