Pārrakstītas metodes izsaukšana OOP PHP

Pārrakstot, pēctecis zaudē piekļuvi pārrakstītajai metodei vecāka. Tomēr, piekļūt tai joprojām ir iespējams. Tas tiek darīts izmantojot atslēgvārdu parent, kas norāda uz vecāka klasi.

Apskatīsim piemēru, kad mums varētu būt nepieciešama piekļuve vecāka metodei. Pieņemsim, ka mums ir šāda vecāka klase:

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

Pieņemsim, ka mēs pēcteča klasē pārrakstījām vecāka metodi:

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

Var pamanīt, ka pārrakstītajā metodē, izpildot nosacījumu, faktiski tiek izpildīts vecāka metodes kods. Izrādās nevajadzīgs koda dublējums.

No tā var atbrīvoties, ja izsauc vecāka metodi. Darīsim to:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        parent::setName($name); // vecāka metode
      } else {
        echo 'student name error';
      }
    }
  }
?>
Задание 1

Dots šāds kods:

php<?php
  class User {
    private $age;
    
    public function setAge($age) {
      if ($age >= 0) {
        $this->age = $age;
      } else {
        echo 'need age more 0';
      }
    }
  }
  
  class Employee extends User {
    public function setAge($age) {
      if ($age <= 120) {
        if ($age >= 0) {
          $this->age = $age;
        } else {
          echo 'need age more 0';
        }
      } else {
        echo 'need age less 120';
      }
    }
  }
?>

Klasē Employee izlabojiet vienkāršojiet vecuma setteri, izmantojot oriģinālo vecāka metodi.