PHP OOP တွင် အက်ပလက်ရှင်းများကို reference ဖြင့် လွှဲပြောင်းခြင်း
အောက်ပါအတိုင်း User class ကို ဖန်တီးထားသည်ဆိုပါစို့:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
အဆိုပါ class ၏ အက်ပလက်ရှင်းတစ်ခုကို ဖန်တီးပါမည်:
<?php
$user = new User('john', 30);
?>
ယခု အောက်ပါအခြေအနေကို စဉ်းစားကြည့်ပါ: သင်
သည်း $user ရှိ တန်ဖိုးကို
အခြားသော variable တစ်ခုထံသို့ ထည့်သွင်းလိုသည်၊ ဥပမာ
$test.
၎င်းသည် အက်ပလက်ရှင်းများနှင့် မသက်ဆိုင်ဘဲ primitives
များ၊ ဆိုလိုသည်မှာ စာကြောင်းများ၊ ဂဏန်းများ၊ arrays စသည်ဖြင့်
ဆိုပါက၊ $test variable ထဲသို့
$user variable ၏ တန်ဖိုး၏ copy သာ ဝင်ရောက်မည်။
ဆိုလိုသည်မှာ နောင်တွင် variable တစ်ခုခု၌ ပြောင်းလဲမှုများ ပြုလုပ်လျှင်ပင် အခြား variable ၏ တန်ဖိုးကို ပြောင်းလဲသွားစေမည် မဟုတ်ပါ။ ဥပမာဖြင့် ကြည့်ရအောင်:
<?php
$user = 1;
$test = $user; // $test variable ထဲတွင် ယခု 1 ရှိသည်
$test = 2; // $test variable ထဲတွင် ယခု 2 ရှိပြီး၊ $user ထဲတွင် ဆက်လက်၍ 1 ရှိဆဲဖြစ်သည်
?>
အက်ပလက်ရှင်းများနှင့် မတူပါ - အခြား variable သို့ ရေးသားသွင်းသောအခါ အက်ပလက်ရှင်းများသည် copy မကူးပါ၊ သို့မဟုတ် reference ဖြင့် လွှဲပြောင်း၏: ဆိုလိုသည်မှာ ဤ variable နှစ်ခုစလုံး၏ တန်ဖိုးသည် တစ်ခုတည်းသော အက်ပလက်ရှင်းကို ရည်ညွှန်းနေခြင်း ဖြစ်သည်။ ဤအချက်သည် အရေးကြီးသော သက်ရောက်မှုရှိသည်: variable တစ်ခုကို အသုံးပြု၍ အက်ပလက်ရှင်း၏ �ုဏ်သတ္တိများကို ပြောင်းလဲလိုက်ပါက၊ ဒုတိယ variable ထဲတွင်လည်း ထိုပြောင်းလဲမှုများ ပေါ်လာမည်ဖြစ်သည်။
လက်တွေ့တွင် ကြည့်ကြပါစို့။ User အတွက် အက်ပလက်ရှင်းတစ်ခုကို ဖန်တီးပါမည်:
<?php
$user = new User('john', 30);
?>
အက်ပလက်ရှင်းကို အခြား variable သို့ ထည့်သွင်းပါမည်:
<?php
$test = $user;
?>
name ဂုဏ်သတ္တိကို
$test variable ထဲတွင်
ပြောင်းလဲပါမည်
<?php
$test->name = 'eric';
?>
ဘုံအက်ပလက်ရှင်း ပြောင်းလဲသွားခြင်း ဟုတ်မဟုတ် စစ်ဆေးကြည့်ကြပါစို့။
name ဂုဏ်သတ္တိကို
$user variable မှ
ထုတ်ပြပါမည်:
<?php
echo $user->name; // 'eric' ကို ထုတ်ပြမည်!
?>
Product class ကို ပြုလုပ်ပါ၊ ယင်းထဲတွင်
အောက်ပါ ဂုဏ်သတ္တိများ ပါဝင်ပါစေ: name,
price.
Product class ၏ အက်ပလက်ရှင်းတစ်ခုကို ဖန်တီးပါ၊
ထိုအက်ပလက်ရှင်းကို $product1 variable ထဲသို့ ရေးသွင်းပါ။
$product1 variable ၏ တန်ဖိုးကို
$product2 variable သို့ ထည့်သွင်းပါ။ variable နှစ်ခုစလုံးသည် တစ်ခုတည်းသော
အက်ပလက်ရှင်းကို ညွှန်ပြနေခြင်း ဟုတ်မဟုတ် စစ်ဆေးပါ။