Överskridande av föräldrametoder i OOP i PHP

En underklass kan åsidosätta en föräldermetod genom att skapa en metod med samma namn. Låt oss titta på ett exempel. Låt oss säga att vi har följande förälderklass:

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

Låt oss i underklassen skapa en metod med samma namn:

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

Vanligtvis behöver man åsidosätta metoder från föräldern för att ändra eller komplettera beteendet hos den metoden. Låt oss i vårt fall lägga till en kontroll av namnets längd:

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

Låt oss försäkra oss om att det är just den åsidosatta metoden som anropas. Låt oss först skapa ett objekt av underklassen:

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

Låt oss nu anropa vår metod, och skicka med ett korrekt värde:

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

Låt oss nu anropa metoden och skicka ett inkorrekt värde. Som ett resultat kommer vi att se ett utskrivet felmeddelande:

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

I klassen User, skapa en getter och setter för ålder.

Задание 2

I klassen Employee, åsidosätt settern för ålder och gör en kontroll där som säkerställer att åldern är mellan 18 och 65 år.