PHP OOP တွင် Abstract Class များ

သင့်မှာ User class တစ်ခုရှိတယ်ဆိုပါစို့၊ အဲ့ဒီကနေ Employee နှင့် Student class များ ဆက်ခံကြတယ်။

Employee နှင့် Student class များ၏ object များကို သင်ဖန်တီးမည်ဟု မှန်းဆရသော်လည်း၊ User class ၏ object များကိုမူ ဖန်တီးမည်မဟုတ်ပါ။ အဘယ်ကြောင့်ဆိုသော် ဤ class ကို ၎င်း၏ အမွေဆက်ခံ class များ၏ အထွေထွေ ဂုဏ်သတ္တိများ (properties) နှင့် နည်းလမ်းများ (methods) အုပ်စုဖွဲ့ရန်အတွက်သာ အသုံးပြုမည်ဖြစ်သောကြောင့်ဖြစ်သည်။

ဤသို့ဖြစ်လျှင် User class ၏ object များကို ဖန်တီးခြင်းအား အတင်းအကျပ် တားမြစ်နိုင်ပါသည်။ သို့မှသာ သင်သော်လည်းကောင်း၊ အခြား programmer သော်လည်းကောင်း တစ်နေရာရာတွင် ၎င်းတို့ကို အမှတ်တမဲ့ ဖန်တီးမိခြင်း မရှိနိုင်တော့ပါ။

ဤအတွက် Abstract Class ဟုခေါ်သော class များ ရှိပါသည်။ Abstract Class များသည် ၎င်းတို့မှ ဆက်ခံရန်အတွက် ရည်ရွယ်ထားသော class များဖြစ်သည်။ ထိုသို့သော class များ၏ object များကို ဖန်တီး၍မရပါ။

Class တစ်ခုကို abstract အဖြစ် ကြေငြာရန်၊ ၎င်း၏ ကြေငြာချက်တွင် abstract ဟူသော သော့ချက်စကားလုံးကို ရေးရန်လိုအပ်သည်:

User.php<?php
  abstract class User
  {
    
  }
?>

ကဲ၊ abstract class User ၏ အကောင်အထည်ဖော်မှုကို ရေးကြည့်ကြပါစို့။ ၎င်းတွင် private property name တစ်ခု ရှိပါစေ၊ ထို့အပြင် ၎င်းအတွက် getter နှင့် setter method များလည်း ရှိပါစေ:

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

User class ၏ object ကို ဖန်တီးရန် ကြိုးစားခြင်းသည် အမှားတစ်ခု ဖြစ်စေပါလိမ့်မည်:

index.php<?php
  $user = new User; // အမှားပေးပါလိမ့်မည်
?>

သို့သော် ကျွန်ုပ်တို့၏ class မှ ဆက်ခံခြင်းကိုမူ လုပ်နိုင်ပါသည်။ ကျွန်ုပ်တို့၏ abstract class User မှ ဆက်ခံမည့် Employee class ကို လုပ်ကြည့်ကြပါစို့:

Employee.php<?php
  class Employee extends User
  {
    private $salary;
    
    public function getSalary()
    {
      return $this->salary;
    }
    
    public function setSalary($salary)
    {
      $this->salary = $salary;
    }
    
  }
?>

Employee class ၏ object တစ်ခုကို ဖန်တီးကြည့်ပါမည် - အားလုံး အလုပ်လုပ်နေပါလိမ့်မည်:

index.php<?php
  $employee = new Employee;
  $employee->setName('john');  // မိဘ class ၏ method၊ ဆိုလိုသည်မှာ User class ၏ method
  $employee->setSalary(1000);  // ၎င်း၏ကိုယ်ပိုင် method၊ ဆိုလိုသည်မှာ Employee class ၏ method
  
  echo $employee->getName();   // 'john' ကို ပြသပါလိမ့်မည်
  echo $employee->getSalary(); // 1000 ကို ပြသပါလိမ့်မည်
?>
Задание 1

�ျီဩမေတြီ ပုံသဏ္ဍာန်ကို ကိုယ်စားပြုသည့် abstract class Figure တစ်ခုကို ပြုလုပ်ပါ။ ၎င်းမှ စက်ဝိုင်း၊ စတုဂံနှင့် စတုရန်း class များ ဆက်ခံပါစေ။