การเรียกใช้งานเมธอดที่ถูกโอเวอร์ไรด์ใน OOP ใน PHP

เมื่อมีการโอเวอร์ไรด์ คลาสลูกจะสูญเสีย การเข้าถึงเมธอดที่ถูกโอเวอร์ไรด์ ของคลาสพ่อแม่ อย่างไรก็ตาม ยังสามารถ เข้าถึงมันได้อยู่ สิ่งนี้ทำได้ โดยใช้คำสำคัญ parent, ซึ่งชี้ไปยังคลาสพ่อแม่

มาดูตัวอย่าง เมื่อเราอาจต้องการการเข้าถึง ไปยังเมธอดของคลาสพ่อแม่ สมมติว่าเรามี คลาสพ่อแม่ดังต่อไปนี้:

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

สมมติว่าในคลาสลูก เราได้โอเวอร์ไรด์เมธอดของคลาสพ่อแม่:

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

จะสังเกตได้ว่าในเมธอดที่โอเวอร์ไรด์ เมื่อเงื่อนไขเป็นจริง การทำงานที่แท้จริง คือโค้ดของเมธอดคลาสพ่อแม่ ซึ่งทำให้เกิดการซ้ำซ้อนของโค้ดที่ไม่จำเป็น

สามารถกำจัดมันได้โดยการเรียก เมธอดของคลาสพ่อแม่ มาลองทำดู:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        parent::setName($name); // เมธอดของคลาสพ่อแม่
      } else {
        echo 'student name error';
      }
    }
  }
?>
Задание 1

กำหนดโค้ดต่อไปนี้:

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';
      }
    }
  }
?>

ในคลาส Employee กรุณาแก้ไข และลดความซับซ้อนของเซ็ตเตอร์อายุ โดยใช้ เมธอดดั้งเดิมของคลาสพ่อแม่