PHP OOP တွင် မှော်ဆန်သော ဂုဏ်သတ္တိများကို ရေးသားခြင်း

မှော်ဆန်သော နည်းလမ်း __set ကို မရှိသော သို့မဟုတ် ကွယ်ဝှက်ထားသော ဂုဏ်သတ္တိတစ်ခု၏ တန်ဖိုးကို ပြောင်းလဲရန် ကြိုးစားသည့်အခါ ခေါ်ဆိုပါသည်။ ၎င်းသည် ဂုဏ်သတ္တိအမည်နှင့် သတ်မှတ်ပေးရန် ကြိုးစားသော တန်ဖိုးကို ပါရာမီတာအဖြစ် လက်ခံပါသည်။

လက်တွေ့ဥပမာတစ်ခုကို ကြည့်ကြပါစို့။ ကျွန်ုပ်တို့တွင် Test ဟူသော အောက်ပါ ကလပ်စ်ရှိသည်ဆိုပါစို့။

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
  }
?>

ဤကလပ်စ်အတွင်း မှော်ဆန်သော နည်းလမ်း __set ကို ပြုလုပ်ကြပါစို့၊ ၎င်းသည် var_dump လုပ်ဆောင်ချက်ကို အသုံးပြု၍ ဝင်ရောက်အသုံးပြုခံရသော ဂုဏ်သတ္တိ၏ အမည်နှင့် ၎င်းအား သတ်မှတ်ပေးရန် ကြိုးစားသော တန်ဖိုးကို ထုတ်ပြမည်ဖြစ်သည်။

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      var_dump($property . ' ' .$value);
    }
  }
?>

ကျွန်ုပ်တို့၏ ကလပ်စ်၏ အလုပ်လုပ်ပုံကို စစ်ဆေးကြည့်ပါမည်။

index.php<?php
  $test = new Test;
  $test->prop = 'value'; // __set နည်းလမ်း၏ var_dump သည် 'prop value' ကို ထုတ်ပြမည်
?>

ယခု ကျွန်ုပ်တို့သည် $property ကိန်းရှင် အတွင်း သိမ်းဆည်းထားသော အမည်ရှိ ဂုဏ်သတ္တိတစ်ခုအား တန်ဖိုးသတ်မှတ်ပေးကြပါစို့။

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $this->$property = $value; // တန်ဖိုးကို သတ်မှတ်ပါသည်
    }
  }
?>

ယခုအခါ ကျွန်ုပ်တို့သည် ကလပ်စ်အပြင်ဘက်မှ သီးသန့်ဂုဏ်သတ္တိများအတွင်း ရေးသားနိုင်မည်ဖြစ်သည်။

index.php<?php
  $test = new Test;
  
  $test->prop1 = 1; // 1 ကို ရေးသားပါမည်
  $test->prop2 = 2; // 2 ကို ရေးသားပါမည်
?>

ကျွန်ုပ်တို့ ရေးသားနိုင်သော်လည်း၊ အမှန်တကယ် တစ်ခုခု ရေးသားမိသလားဆိုတာ စစ်ဆေးရန် မဖြစ်နိုင်ပါ၊ အဘယ်ကြောင့်ဆိုသော် ဂုဏ်သတ္တိများသည် သီးသန့်ဖြစ်နေသောကြောင့် ဖြစ်သည်။

ဤဂုဏ်သတ္တိများအတွက် ရယူသူ (getter) ပြုလုပ်နိုင်သည် သို့မဟုတ် မှော်ဆန်သော နည်းလမ်း __get ကို ရိုးရှင်းစွာ အသုံးပြုနိုင်သည်။ ဒုတိယရွေးချယ်စရာကို အသုံးပြုကြပါစို့။

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $this->$property = $value;
    }
    
    // ဂုဏ်သတ္တိများအတွက် မှော်ဆန်သော ရယူသူ (getter)။
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

ယခုအခါ ကျွန်ုပ်တို့၏ ကလပ်စ်၏ အလုပ်လုပ်ပုံကို စစ်ဆေးနိုင်ပါသည်။ စစ်ဆေးကြည့်ပါမည်။

index.php<?php
  $test = new Test;
  
  $test->prop1 = 1; // 1 ကို ရေးသားပါမည်
  $test->prop2 = 2; // 2 ကို ရေးသားပါမည်
  
  echo $test->prop1; // 1 ကို ထုတ်ပြမည်
  echo $test->prop2; // 2 ကို ထုတ်ပြမည်
?>

တကယ်တော့၊ သီးသန့်ဂုဏ်သတ္တိများအတွင်းသို့ လူတိုင်းအား ရေးသားခွင့်ပေးရန် မသင့်တော်ပါ၊ �ိုသို့ဆိုလျှင် ထိုသီးသန့်ဂုဏ်သတ္တိများ၏ အနှစ်သာရ ပျောက်ကွယ်သွားမည်ဖြစ်သည် (သူတို့အား အများသုံး အဖြစ်ပြုလုပ်ပြီး အဆုံးသတ်လိုက်ခြင်းက ပိုမိုလွယ်ကူသည်)။

ထို့ကြောင့် ဤနည်းလမ်းကို အမှန်တကယ် လိုအပ်မှုရှိသည့် အချိန်များတွင်သာ အသုံးပြုသင့်ပါသည်။ နောက်လာမည့် သင်ခန်းစာများတွင် အောင်မြင်စွာ အသုံးပြုနိုင်သော ဥပမာများကို ထပ်မံဆွေးနွေးပါမည်။