PHP ရှိ OOP တွင် ဖတ်ရှုရန်သာ အသုံးပြုနိုင်သော ဂုဏ်သတ္တိများ

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

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

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

ယခု ဤပြဿနာကိုဖြေရှင်းရန် မှော်နည်းလမ်း __get ကို အသုံးပြုကြပါစို့။ ၎င်းတွင် တောင်းဆိုထားသော ဂုဏ်သတ္တိ၏ တန်ဖိုးကို ပြန်ပေးပါမည်။ မည်သို့ပြုလုပ်ရမည်နည်း။ တောင်းဆိုထားသော ဂုဏ်သတ္တိ၏ အမည်သည် __get နည်းလမ်း၏ သတ်မှတ်ချက်ထဲသို့ ရောက်ရှိလာပြီး၊ ကျွန်ုပ်တို့၏ကိစ္စတွင် ၎င်းသည် $property ဖြစ်သည်။

ဆိုလိုသည်မှာ၊ အမည်သည် ကိန်းရှင်ထဲတွင် သိမ်းဆည်းထားသော ဂုဏ်သတ္တိ၏ တန်ဖိုးကို ဤသို့ဖတ်နိုင်သည်။ $this->$property (ဂုဏ်သတ္တိ၏အမည်သည် ကိန်းရှင်တစ်ခုဖြစ်လာမည်၊ ဆိုလိုသည်မှာ အစတွင် ဒေါ်လာလက္ခဏာပါမည်၊ ကျွန်ုပ်တို့သည် ယခင်သင်ခန်းစာများတွင် ဤအချက်ကိုလေ့လာခဲ့ပြီးဖြစ်သည်)။

ဖော်ပြထားသော __get နည်းလမ်းကို ဖန်တီးကြပါစို့။

Test.php<?php
  class Test
  {
    private $prop1 = 1;
    private $prop2 = 2;
    
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

ဂုဏ်သတ္တိများကိုဖတ်ရန် ၎င်းကိုအသုံးပြုကြပါစို့။

index.php<?php
  $test = new Test;
  
  echo $test->prop1; // 1 ကိုပြမည်
  echo $test->prop2; // 2 ကိုပြမည်
?>

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

php<?php
  $test = new Test;
  $test->prop1 = 2; // အမှားတစ်ခုကို ပြမည်
?>

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

မရှိသောဂုဏ်သတ္တိကို ဖတ်ရန် ကြိုးစားခြင်းသည် အမှားတစ်ခုကို ပြမည်။

php<?php
  $test = new Test;
  echo $test->prop3; // အမှားတစ်ခုကို ပြမည်
?>

အောက်ပါအသေးစိတ်အချက်ကိုလည်း သတိပြုပါ။ ကျွန်ုပ်တို့သည် ဂုဏ်သတ္တိများကို ဖတ်ရန်သာအသုံးပြုနိုင်အောင် အဟောင်းနည်းလမ်းဖြင့် ပြုလုပ်သောအခါ၊ ဂုဏ်သတ္တိကိုဖတ်ရန် ကျွန်ုပ်တို့သည် getter နည်းလမ်းကို အသုံးပြုခဲ့သည်။

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

Задание 1

User ကလပ်စ်တစ်ခုကို ပေးထားပါစို့၊ ၎င်း၏ဂုဏ်သတ္တိများကို getter များအသုံးပြု၍ ဖတ်ရန်သာအသုံးပြုနိုင်သည်။

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

ဤကလပ်စ်၏ကုဒ်ကို getter များအစား မှော်နည်းလမ်း __get ကိုအသုံးပြုအောင် ပြန်လည်ပြင်ဆင်ပါ။