Overstyring af forældremetoder i OOP i PHP

En underklasse kan overstyre en forældremetode ved at oprette en metode med det samme navn. Lad os se et eksempel. Antag, at vi har følgende forældreklasse:

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

Lad os i underklassen oprette en metode med samme navn:

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

Som regel er overstyring af forældremetoder nødvendig for at ændre eller supplere denne metodes adfærd. Lad os i vores tilfælde tilføje en kontrol af navnets længde:

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

Lad os sikre os, at det er den overstyrede metode, der kaldes. Lad os først oprette et objekt af underklassen:

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

Lad os nu kalde vores metode og give den en korrekt værdi:

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

Lad os nu kalde metoden og give den en ukorrekt værdi. Som et resultat vil vi se den udløste undtagelse:

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

I klassen User skal du lave en getter og setter for alder.

Задание 2

I klassen Employee skal du overstyre alder-sætteren og lave en kontrol i den for, at alderen er fra 18 til 65 år.