วิธีใช้ Abstract Method ใน OOP ของ PHP

Abstract Class ยังสามารถมี Abstract Method ได้ด้วย เมธอดประเภทนี้จะต้องไม่มี implementation (ส่วนตัวของเมธอด) แต่มีไว้เพื่อระบุว่าเมธอดดังกล่าวจะต้องมีอยู่ในคลาสลูกหลาน และ การ implement เมธอดเหล่านี้เป็นหน้าที่ของคลาสลูกหลาน

เพื่อประกาศให้เมธอดเป็น abstract ในการประกาศเมธอดให้ใส่คีย์เวิร์ด abstract

มาลองฝึกปฏิบัติกัน สมมติว่าคลาสลูกทุกตัวของคลาส User จะต้องมีเมธอด increaseRevenue

เมธอดนี้ควรนำรายได้ปัจจุบันของผู้ใช้มาบวกเพิ่มด้วยจำนวนที่ส่งผ่านพารามิเตอร์

ตัวคลาส User เองไม่รู้ว่ารายได้ของคลาสลูกจะเป็นอะไร เพราะสำหรับพนักงานคือเงินเดือน ส่วนสำหรับนักเรียนคือทุนการศึกษา ดังนั้นคลาสลูกแต่ละตัวจะ implement เมธอดนี้ด้วยตัวเอง

ประเด็นคือ Abstract Method ของคลาส User บังคับให้โปรแกรมเมอร์ต้อง implement เมธอดนี้ในคลาสลูก มิฉะนั้น PHP จะแสดงข้อผิดพลาด ดังนั้น คุณหรือโปรแกรมเมอร์คนอื่นที่ทำงานกับโค้ดของคุณจะไม่มีทางลืม implement เมธอดที่จำเป็นในคลาสลูกได้

เอาล่ะ มาลองฝึกปฏิบัติกัน เพิ่ม Abstract Method increaseRevenue เข้าไปในคลาส User:

User.php<?php
  abstract class User
  {
    private $name;
    
    public function getName()
    {
      return $this->name;
    }
    
    public function setName($name)
    {
      $this->name = $name;
    }
    
    // Abstract method ที่ไม่มี body:
    abstract public function increaseRevenue($value);
  }
?>

ให้คลาส Employee ของเรายังคงเหมือนเดิมไม่เปลี่ยนแปลง ในกรณีนี้ ถึงจะไม่สร้างอ็อบเจกต์ของคลาส Employee แต่แค่รันโค้ดที่กำหนดคลาสของเรา PHP ก็จะแสดงข้อผิดพลาดแล้ว

ตอนนี้ให้เราเขียน implementation ของเมธอด increaseRevenue ในคลาส Employee:

Employee.php<?php
  class Employee extends User
  {
    private $salary;
    
    public function getSalary()
    {
      return $this->salary;
    }
    
    public function setSalary($salary)
    {
      $this->salary = $salary;
    }
    
    // เขียน implementation ของเมธอด:
    public function increaseRevenue($value)
    {
      $this->salary = $this->salary + $value;
    }
  }
?>

ทดสอบการทำงานของคลาสของเรา:

index.php<?php
  $employee = new Employee;
  $employee->setName('john');
  $employee->setSalary(1000);
  $employee->increaseRevenue(100);
  
  echo $employee->getSalary();
?>

implement เมธอด increaseRevenue ในคลาส Student ด้วย แต่คราวนี้เมธอดของเราจะเพิ่มทุนการศึกษา:

Student.php<?php
  class Student extends User
  {
    private $scholarship; // ทุนการศึกษา
    
    public function getScholarship()
    {
      return $this->scholarship;
    }
    
    public function setScholarship($scholarship)
    {
      $this->scholarship = $scholarship;
    }
    
    // เมธอดเพิ่มทุนการศึกษา:
    public function increaseRevenue($value)
    {
      $this->scholarship = $this->scholarship + $value;
    }
  }
?>
Задание 1

เพิ่ม Abstract Method increaseRevenue แบบเดียวกันเข้าไปในคลาส User ของคุณ เขียน implementation ของเมธอดนี้ในคลาส Employee และ Student

Задание 2

ในคลาส Figure ให้สร้าง Abstract Method สำหรับหาพื้นที่และความยาวรอบรูป