PHP OOP တွင် အက်ပလက်ရှင်းများကို reference ဖြင့် လွှဲပြောင်းခြင်း

အောက်ပါအတိုင်း User class ကို ဖန်တီးထားသည်ဆိုပါစို့:

User.php<?php
  class User
  {
    public $name;
    public $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age  = $age;
    }
  }
?>

အဆိုပါ class ၏ အက်ပလက်ရှင်းတစ်ခုကို ဖန်တီးပါမည်:

index.php<?php
  $user = new User('john', 30);
?>

ယခု အောက်ပါအခြေအနေကို စဉ်းစားကြည့်ပါ: သင် သည်း $user ရှိ တန်ဖိုးကို အခြားသော variable တစ်ခုထံသို့ ထည့်သွင်းလိုသည်၊ ဥပမာ $test.

၎င်းသည် အက်ပလက်ရှင်းများနှင့် မသက်ဆိုင်ဘဲ primitives များ၊ ဆိုလိုသည်မှာ စာကြောင်းများ၊ ဂဏန်းများ၊ arrays စသည်ဖြင့် ဆိုပါက၊ $test variable ထဲသို့ $user variable ၏ တန်ဖိုး၏ copy သာ ဝင်ရောက်မည်။

ဆိုလိုသည်မှာ နောင်တွင် variable တစ်ခုခု၌ ပြောင်းလဲမှုများ ပြုလုပ်လျှင်ပင် အခြား variable ၏ တန်ဖိုးကို ပြောင်းလဲသွားစေမည် မဟုတ်ပါ။ ဥပမာဖြင့် ကြည့်ရအောင်:

index.php<?php
  $user = 1;
  
  $test = $user; // $test variable ထဲတွင် ယခု 1 ရှိသည်
  $test = 2;     // $test variable ထဲတွင် ယခု 2 ရှိပြီး၊ $user ထဲတွင် ဆက်လက်၍ 1 ရှိဆဲဖြစ်သည်
?>

အက်ပလက်ရှင်းများနှင့် မတူပါ - အခြား variable သို့ ရေးသားသွင်းသောအခါ အက်ပလက်ရှင်းများသည် copy မကူးပါ၊ သို့မဟုတ် reference ဖြင့် လွှဲပြောင်း၏: ဆိုလိုသည်မှာ ဤ variable နှစ်ခုစလုံး၏ တန်ဖိုးသည် တစ်ခုတည်းသော အက်ပလက်ရှင်းကို ရည်ညွှန်းနေခြင်း ဖြစ်သည်။ ဤအချက်သည် အရေးကြီးသော သက်ရောက်မှုရှိသည်: variable တစ်ခုကို အသုံးပြု၍ အက်ပလက်ရှင်း၏ �ုဏ်သတ္တိများကို ပြောင်းလဲလိုက်ပါက၊ ဒုတိယ variable ထဲတွင်လည်း ထိုပြောင်းလဲမှုများ ပေါ်လာမည်ဖြစ်သည်။

လက်တွေ့တွင် ကြည့်ကြပါစို့။ User အတွက် အက်ပလက်ရှင်းတစ်ခုကို ဖန်တီးပါမည်:

index.php<?php
  $user = new User('john', 30);
?>

အက်ပလက်ရှင်းကို အခြား variable သို့ ထည့်သွင်းပါမည်:

index.php<?php
  $test = $user;
?>

name ဂုဏ်သတ္တိကို $test variable ထဲတွင် ပြောင်းလဲပါမည်

index.php<?php
  $test->name = 'eric';
?>

ဘုံအက်ပလက်ရှင်း ပြောင်းလဲသွားခြင်း ဟုတ်မဟုတ် စစ်ဆေးကြည့်ကြပါစို့။ name ဂုဏ်သတ္တိကို $user variable မှ ထုတ်ပြပါမည်:

index.php<?php
  echo $user->name; // 'eric' ကို ထုတ်ပြမည်!
?>
Задание 1

Product class ကို ပြုလုပ်ပါ၊ ယင်းထဲတွင် အောက်ပါ ဂုဏ်သတ္တိများ ပါဝင်ပါစေ: name, price.

Задание 2

Product class ၏ အက်ပလက်ရှင်းတစ်ခုကို ဖန်တီးပါ၊ ထိုအက်ပလက်ရှင်းကို $product1 variable ထဲသို့ ရေးသွင်းပါ။

Задание 3

$product1 variable ၏ တန်ဖိုးကို $product2 variable သို့ ထည့်သွင်းပါ။ variable နှစ်ခုစလုံးသည် တစ်ခုတည်းသော အက်ပလက်ရှင်းကို ညွှန်ပြနေခြင်း ဟုတ်မဟုတ် စစ်ဆေးပါ။