Properties

Property ဆိုတာကတော့ class အတွင်းမှာရှိတဲ့ Variable တစ်ခုဖြစ်ပါတယ်။ Class body အတွင်းမှာရှိတဲ့ variable တိုင်းကို မဆိုလိုပါဘူး။ Property တစ်ခုကို declare လုပ်တဲ့အခါ ပုံမှန် variable တစ်ခုကို declare လုပ်သလိုပါဘဲ ဒါပေမဲ့ သူ့ရဲ့အရှေ့မှာ Accesss Modifier တွေဖြစ်တဲ့ public, protected, private တစ်ခုခုပါရပါလိမ့်မယ်။ Access Modifier တွေအကြောင်းကိုနောက်ပိုင်းမှဆက်လက်တင်ပေးသွားမှာပါ။ အခု public ကိုအသုံးပြုပြီး Property တစ်ခု declare လုပ်ပါမယ်။

class Index
{
public $name= “Maung Maung;
}

$name ဟာ Index Class ရဲ့ Property ဖြစ်ပါတယ်။ public ရဲ့အဓိပ္ပါယ်ကတော့ Class ကို instantiate လုပ်ထားတဲ့ Object ကနေခေါ်ယူခွင့်ရှိတယ်လို့ အလွယ်မှတ်ထားလိုက်ပါ။ Code ရေးပြထားတာကတော့ Student ဆိုတဲ့ Class ထဲမှာ $name,$age,$job ဆိုတဲ့ properties သုံးခုရှိပါတယ်။ Student Class ကို instantiateလုပ်ထားတာက $stdObj ဆိုတဲ့ instance object ပါ။ Proprrties သုံးခုလုံးရဲ့ Access Modifier တွေဟာ public တွေဖြစ်တဲ့အတွက်Object ကနေခေါ်ယူလို့ရနိုင်ပါတယ်။ အဲ့ဒါကြောင့် $stdObj Object က Student Class ထဲမှာရှိတဲ့ Property သုံးခုလုံးကိုပိုင်ဆိုင်ပါတယ်။ ဒါဆို ခေါ်ယူပြီးအဖြေထုတ်ကြည့်ရအောင်လား။ Object ကနေသူ့ထဲမှာရှိတဲ့ Properties တွေ Method တွေခေါ်ယူချင်တယ်ဆိုရင် -> ဒီသင်္ကေတလေးကိုအသုံးပြုပြီးခေါ်ယူရပါတယ်။ java တို့ JS တို့ကျ . ( dot sign ) ကိုအသုံးပြုကြပါတယ်။ $stdObject ရဲ့ name ကိုလိုချင်တဲ့ အခါ $stdObject->name လို့ရေးပြီး ရယူနိုင်ပါတယ်။ name ရဲ့ရှေ့မှာ $ ထည့်စရာမလိုပါဘူး။ age ကိုလိုချင်တဲ့အခါ $stdObj->age လို့ခေါ်ယူအသုံးပြုနိုင်ပါတယ်။ browser ပေါ်မှာ အဖြေထုတ်ပြမှာဖြစ်တဲ့အတွက် echo နဲ့အဖြေထုတ်ရမှာပေါ့။ echo $stdObj->job; လို့အဖြေထုတ်လိုက်မယ်ဆိုရင် $job မှာ assign လုပိထားတဲ့ တန်ဖိုးအတိုင်းအဖြေထုတ်ပြပါလိမ့်မယ်။ echo ‘<br>’; ဆိုတာက OOP နဲပတ်သက်မှုမရှိပါဘူး။ အဖြေထုတ်ပြတဲ့အခါမှာအောက်ကိုတစ်ကြောင်းဆင်းဖို့အတွက်အသုံးပြုထားတာပါ။
Class name ဟာ file name နဲ့ တူသင့်တယ်လို့ကျွန်တော်ပြောခဲ့ပါတယ်။ အခုCode မှာ file name က index ဖြစ်ပီး class name က Student ဖြစ်နေပါတယ်။ ကျွန်တော်က knowledge share ဖို့အတွက်လုပ်နေတာဖြစ်တဲ့အတွက် file တစ်ခုထဲမှာဘဲရေးနေတာပါ။ တကယ်တော့တူသင့်ပါတယ်။

Kan Hein

003_more_object

One or more Objects and id

Class တစ်ခုကနေမှ instance Object တစ်ခုထက်မက ရယူအသုံးပြုနိုင်ပါတယ်။ ကျွန်တော်တို့လိုအပ်တဲ့အရေအတွက်တိုင်း object တွေဖန်တီးနိုင်ပါတယ်။ Class တစ်ခုကို Object တစ်ခုအဖြစ်ရယူခြင်းကို instantiate လုပ်တယ်လို့ခေါ်ပါတယ်။ Object လို့ခေါ်သလို instance object လို့လည်း ခေါ်ကြပါတယ်။ ဥပမာလေးတစ်ခုနဲ့ပြောပြချင်ပါတယ်။ Class ကိုစာသင်တန်းတစ်တန်းလို့တွေးကြည့်လိုက်ပါ။ အတန်းတစ်တန်းမှာ ကျောင်းသားပေါင်း၂၀ / ၃၀ လောက်ရှိမယ်စိတ်ကူးကြည့်ပါ။ အတန်းသားတွေဖြစ်တဲ့အတွက် သင်ယူရတဲ့ဘာသာရပ်တွေ အတူတူဘဲဖြစ်မယ်ပေါ့။ မတူတာတော့ရှိတယ် အဲ့ဒါက Roll Number ပါဘဲ။ Roll Number ဟာကျောင်းတွင်းမှာကျောင်းသားရဲ့ Id ဆိုလည်းမှားမယ်မထင်ပါဘူး။
Object ကဘာနဲ့တူသလဲဆိုတော့ ကျောင်းသားနဲ့တူတယ်။ ရိုးရိုးလေးတွေးကြည့်ရအောင် အတန်းထဲမှာသင်ရတဲ့ဘာသာရပ်တိုင်း အတန်းသားအားလုံးအတူတူသင်ခွင့်ရှိတယ် အဲ့လိုဘဲ တူညီတဲ့ Class တစ်ခုကနေ instantiate လုပ်ထားတဲ့ Object တိုင်းဟာ အဲ့ဒီ Class ကအသုံးပြုခွင့်ပေးထားတဲ့ Method တွေ Properties တွေ အတူတူအသုံးပြုခွင့်ရှိပါတယ်။ ကျောင်းသားတွေရဲ့ Roll no မတူသလို Object တွေမှာလည်းသူ့ ID နဲ့သူ ရှိပီးသားပါ။ ကျောင်းသားတစ်ယောက်ဟာ သူစာလုပ်ရင်သူစာရမယ်။ စာမလုပ်ရင်စာမရဘူး။ အခြားကျောင်းသားရဲ့activity နဲ့သူရဲ့ activity ဟာအခြင်းခြင်းဘာအကျိုးသက်ရောက်မှုမှရှိမှာမဟုတ်ပါဘူး။ စာလုပ်တဲ့သူဘဲစာရပါလိမ့်မယ်။ Object တွေလည်း ထိုနည်းလည်းကောင်းပါဘဲဗျာ Class တစ်ခုတည်းကိုဘဲ မှီငြမ်းပီး Object တွေဖြစ်တည်လာတယ်ဆိုပေမဲ့ အချင်းချင်းသက်ရောက်မှုတွေမရှိပါဘူး။


ဒီနေရာမှာ Complain တက်ခွင့်ရှိလာပီ ကျောင်းသားတစ်ယောက်က စာရရင် ပြန်ရှင်းပြပေးလို့ရတာဘဲအချင်းချင်းတွေကို အဲ့လိုမေးလာခဲ့ရင်လည်း အဖြေကရှိပီးသားပါ နောက် ကျရှင်းပြပေးမှာပါ။ Strategy Design Pattern ဆိုရင် Run Time မှာObject တစ်ခုကနေ Class တွေချိန်းပြီး Run သွားတာတွေ့ရပါလိမ့်မယ်။ အခုပြောချင်တာက ယေဘူယျ သဘောနဲ့တွေးစေချင်တာပါ။



ပုံမှာ Code ရေးပြထားပါတယ် Object ၃ ခု instantiate လုပ်ထားတာတွေ့ရပါလိမ့်မယ်။ Object တွေရဲ့ id ကိုပုံမှန်အားဖြင့်မဖော်ပြပါဘူး။ Debug mode မှာအသုံးပြုတဲ့ PHP builtin function ဖြစ်တဲ့ var_dump( ) ကိုအသုံးပြုပြီးကြည့်နိုင်ပါတယ်။ #1 #2 #3 ဆိုပြီးနံပါတ်သုံးခုတွေ့ရပါလိမ့်မယ်။ # sign ရဲ့နောက်က number ဟာ objectရဲ့id no ဖြစ်ပါတယ်။Object ၃ခုရှိတဲ့အတွက် id ကလည်း ၃ခုရှိရမှာပေါ့။ $firstObj ရဲ့ id ဟာ 1 ဖြစ်တယ်ဆိုတာသဘောပေါက်ရင် 2 နဲ့ 3 ကိုဆက်ရှင်းပြနေစရာလိုမယ်မထင်တော့ပါဘူး။

Kan Hein

003_more_object

Object တစ်ခုရယူခြင်း

Class တစ်ခုကို invoke မလုပ်ဘဲ class တစ်ခုရေးထားရုံနဲ့အလုပ်မပါဘူး။ အလုပ်လုပ်စေချင်တယ်ဆိုရင် new keyword ကိုအသုံးပြုပြီးတော့ invoke လုပ်နိုင်ပါတယ်။ invoke လုပ်တယ်ဆိုတာကတော့အလုပ်လုပ်ဖို့ class ကိုလှမ်းနှိုးလိုက်တယ်လို့ ပြောရမှာပါ။ new keyword သုံးရုံနဲ့ class body ထဲမှာရှိရှိသမျှ instuction တိုင်းကို execute လုပ်မှာမဟုတ်ပါဘူး။ ဥပမာအားဖြင့် Constructer တွေတော့ execute လုပ်မှာပေါ့။ Constructor အကြောင်းကိုနောက် Method အပိုင်းမှာတင်ပေးသွားမှာပါ။ ပြောချင်တာက new keyword ရဲ့အလုပ်ကအိပ်နေတဲ့ Class ကိုအလုပ်သွားဖို့လှမ်းနှိုးတဲ့အဆင့်မှာဘဲရှိပါသေးတယ်။ Class ကိုinvoke လုပ်ပီး variable တစ်ခုထဲကို assign လုပ်လိုက်တဲ့အခါမှာ Variable ဟာ non-Primitive Data ဖြစ်တဲ့ Object ဖြစ်သွားပါတယ်။ Code မှာရေးပြထားတာက $objectOfIndex variable ဟာ Index Class ရဲ့ Object ဖြစ်ပါတယ်။
ဒါကြောင့် $objectOfIndex ဟာ Object Data Type ဖြစ်ပါတယ်။ Object တစ်ခုရရှိလာပါတယ်။ Object Name ကိုပေးတဲ့အခါ သူလည်းပဲ Variable ဖြစ်လို့ alphabet နဲ့စပြီး underscore number တို့နဲ့ တွဲရေးနိုင်ပါတယ်။ Human readable ဖြစ်အောင်ရေးရင်တော့ပိုကောင်းတာပေါ့

Kan Hein

002_object

OOP with PHP

OOP လို့ခေါ်တဲ့ Oblect Oriented Programming အကြောင်းအနည်းငယ်ပြောပြချင်ပါတယ်။ Projectတွေရေးတဲ့အခါမြန်ဆန်ထိရောက်မှုရှိတဲ့အတွက်ကြေင့်OOPကိုအသုံးပြုနေကြပါတယ်။ OOP design-pattern တွေရဲ့အားသာချက်ကလည်းတကယ့်ကိုအံ့မခန်းပါဘဲ။
အခုOOPကိုအနည်းငယ်လောက်လေးမိတ်ဆက်ပေးချင်ပါတယ်။Object ဆိုလို့ တစ်မျိုးတော့မထင်လိုက်ပါနဲ့ သူလည်း variable တစ်ခုပါဘဲ။ Oriented ဆိုတာကတော့ အလေးပေးမှု အဓိကထားမှုလို့အဓိပ္ပါယ်ရပါတယ်။ Object တွေကိုအဓိကထားတဲ့ပုံစံပေါ့။ Object က ဘယ်ကနေဖြစ်တည်လာသလဲဆိုတော့ class တစ်ခုကနေ ဖြစ်ပေါ်လာတာပါ။ class မရှိဘဲ Oblect ဆိုတာမရှိနိုင်ပါဘူး။ Class တစ်ခုကနေ Object ပေါင်းမြောက်များစွာရယူလို့ရပါတယ်။ class တစ်ခုကိုဘယ်လိုတည်ဆောက်မလဲဆိုတော့………

Class တစ်ခုကိုတည်ဆောက်တော့မယ်ဆိုရင် class ဆိုတဲ့ Keyword ကိုအသုံးပြုပြီးတည်ဆောက်ရပါလိမ့်မယ်။ class keyword ရဲ့နောက်မှာ ကျွန်တော်တို့ တည်ဆောက်ချင်တဲ့ class ရဲ့နာမည် ရေးရပါမယ်။ class name ကိုရေးတဲ့အခါမှာ Alphabet Character နဲ့စရေးရပါလိမ့်မယ်။ စလုံးအကြီးနဲ့စရေးသင့်ပါတယ်။ Number တွေလည်းနောက်ကနေလိုက်လို့ရပါတယ် အစမှာတော့ Number တွေနဲ့စလို့မရပါဘူး။ Class Name ပေးတဲ့အခါမှာ ကျွန်တော်တို့ရေးနေတဲ့ file nameနဲ့တူအောင်ပေးသင့်ပါတယ်။ အခုဒီပုံမှာဆိုရင် Class Name က Index ဖြစ်ပီးတော့ File name က index.php ဖြစ်ပါတယ်။
class nameရဲ့ နောက်မှာ class bodyလိုက်ရပါမယ်။ class body ဆိုတာကတော့ curly bracket { } ကိုပြောတာပါ။ အဲဒီ curly bracket အဖွင့်အပိတ်ကြားမှာ လုပ်ဆောင်ချက်တွေကိုထည့်မှာဖြစ်ပါတယ်။
အခုဟာကတော့class တစ်ခုတည်ဆောက်ထားရုံဘဲရှိပါသေးတယ်။

Kan Hein

001_class