PHP OOP တွင် မှော်ဆန်သော ဂုဏ်သတ္တိများကို ရေးသားခြင်း
မှော်ဆန်သော နည်းလမ်း __set ကို
မရှိသော သို့မဟုတ် ကွယ်ဝှက်ထားသော
ဂုဏ်သတ္တိတစ်ခု၏ တန်ဖိုးကို ပြောင်းလဲရန်
ကြိုးစားသည့်အခါ ခေါ်ဆိုပါသည်။ ၎င်းသည်
ဂုဏ်သတ္တိအမည်နှင့် သတ်မှတ်ပေးရန် ကြိုးစားသော
တန်ဖိုးကို ပါရာမီတာအဖြစ် လက်ခံပါသည်။
လက်တွေ့ဥပမာတစ်ခုကို ကြည့်ကြပါစို့။
ကျွန်ုပ်တို့တွင် Test ဟူသော အောက်ပါ
ကလပ်စ်ရှိသည်ဆိုပါစို့။
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
ဤကလပ်စ်အတွင်း မှော်ဆန်သော
နည်းလမ်း __set ကို ပြုလုပ်ကြပါစို့၊
၎င်းသည် var_dump လုပ်ဆောင်ချက်ကို
အသုံးပြု၍ ဝင်ရောက်အသုံးပြုခံရသော ဂုဏ်သတ္တိ၏
အမည်နှင့် ၎င်းအား သတ်မှတ်ပေးရန် ကြိုးစားသော
တန်ဖိုးကို ထုတ်ပြမည်ဖြစ်သည်။
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
ကျွန်ုပ်တို့၏ ကလပ်စ်၏ အလုပ်လုပ်ပုံကို စစ်ဆေးကြည့်ပါမည်။
<?php
$test = new Test;
$test->prop = 'value'; // __set နည်းလမ်း၏ var_dump သည် 'prop value' ကို ထုတ်ပြမည်
?>
ယခု ကျွန်ုပ်တို့သည် $property ကိန်းရှင်
အတွင်း သိမ်းဆည်းထားသော အမည်ရှိ ဂုဏ်သတ္တိတစ်ခုအား
တန်ဖိုးသတ်မှတ်ပေးကြပါစို့။
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // တန်ဖိုးကို သတ်မှတ်ပါသည်
}
}
?>
ယခုအခါ ကျွန်ုပ်တို့သည် ကလပ်စ်အပြင်ဘက်မှ သီးသန့်ဂုဏ်သတ္တိများအတွင်း ရေးသားနိုင်မည်ဖြစ်သည်။
<?php
$test = new Test;
$test->prop1 = 1; // 1 ကို ရေးသားပါမည်
$test->prop2 = 2; // 2 ကို ရေးသားပါမည်
?>
ကျွန်ုပ်တို့ ရေးသားနိုင်သော်လည်း၊ အမှန်တကယ် တစ်ခုခု ရေးသားမိသလားဆိုတာ စစ်ဆေးရန် မဖြစ်နိုင်ပါ၊ အဘယ်ကြောင့်ဆိုသော် ဂုဏ်သတ္တိများသည် သီးသန့်ဖြစ်နေသောကြောင့် ဖြစ်သည်။
ဤဂုဏ်သတ္တိများအတွက် ရယူသူ (getter) ပြုလုပ်နိုင်သည် သို့မဟုတ်
မှော်ဆန်သော နည်းလမ်း __get ကို ရိုးရှင်းစွာ အသုံးပြုနိုင်သည်။
ဒုတိယရွေးချယ်စရာကို အသုံးပြုကြပါစို့။
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// ဂုဏ်သတ္တိများအတွက် မှော်ဆန်သော ရယူသူ (getter)။
public function __get($property)
{
return $this->$property;
}
}
?>
ယခုအခါ ကျွန်ုပ်တို့၏ ကလပ်စ်၏ အလုပ်လုပ်ပုံကို စစ်ဆေးနိုင်ပါသည်။ စစ်ဆေးကြည့်ပါမည်။
<?php
$test = new Test;
$test->prop1 = 1; // 1 ကို ရေးသားပါမည်
$test->prop2 = 2; // 2 ကို ရေးသားပါမည်
echo $test->prop1; // 1 ကို ထုတ်ပြမည်
echo $test->prop2; // 2 ကို ထုတ်ပြမည်
?>
တကယ်တော့၊ သီးသန့်ဂုဏ်သတ္တိများအတွင်းသို့ လူတိုင်းအား ရေးသားခွင့်ပေးရန် မသင့်တော်ပါ၊ �ိုသို့ဆိုလျှင် ထိုသီးသန့်ဂုဏ်သတ္တိများ၏ အနှစ်သာရ ပျောက်ကွယ်သွားမည်ဖြစ်သည် (သူတို့အား အများသုံး အဖြစ်ပြုလုပ်ပြီး အဆုံးသတ်လိုက်ခြင်းက ပိုမိုလွယ်ကူသည်)။
ထို့ကြောင့် ဤနည်းလမ်းကို အမှန်တကယ် လိုအပ်မှုရှိသည့် အချိန်များတွင်သာ အသုံးပြုသင့်ပါသည်။ နောက်လာမည့် သင်ခန်းစာများတွင် အောင်မြင်စွာ အသုံးပြုနိုင်သော ဥပမာများကို ထပ်မံဆွေးနွေးပါမည်။