การแทนที่เมธอดของคลาสแม่ใน OOP ใน PHP

คลาสลูกสามารถแทนที่ (override) เมธอดของคลาสแม่ได้ โดยการสร้างเมธอดที่มีชื่อเดียวกัน มาดูตัวอย่างกัน ให้เรามีคลาสแม่ดังต่อไปนี้:

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) {
      
    }
  }
?>

โดยทั่วไปแล้ว การแทนที่เมธอดของคลาสแม่ ทำเพื่อเปลี่ยนหรือเพิ่มพฤติกรรมของเมธอดนั้น ในกรณีของเรา ลองเพิ่มการตรวจสอบความยาวของชื่อ:

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

มาทดสอบให้แน่ใจว่าเมธอดที่ถูกแทนที่นั้นถูกเรียกใช้งานจริง เริ่มจากสร้างออบเจ็กต์ของคลาสลูก:

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

ตอนนี้เรียกใช้เมธอดของเรา โดยส่งค่าเข้าไปอย่างถูกต้อง:

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

และลองเรียกใช้เมธอดอีกครั้ง โดยส่งค่า ที่ไม่ถูกต้องเข้าไป ผลลัพธ์ที่ได้จะเห็นข้อความแสดงข้อผิดพลาด:

php<?php
  $student->setName(''); // ข้อผิดพลาด
?>
Задание 1

ในคลาส User จงสร้าง getter และ setter สำหรับอายุ

Задание 2

ในคลาส Employee จงแทนที่ (override) setter สำหรับอายุ และเพิ่มการตรวจสอบ ว่าอายุต้องอยู่ระหว่าง 18 ถึง 65 ปี