PHP တွင် OOP Interface များ
သင်သိထားသည့်အတိုင်း၊ အယ်ဘ်စထရက်အတန်းများ (abstract classes) သည် ၎င်းတို့၏ အမွေဆက်ခံအတန်းများ (descendants) အတွက် လုပ်ဆောင်ချက်များ (methods) စုစည်းမှုကို ကိုယ်စားပြုပါသည်။ ထိုလုပ်ဆောင်ချက်များ၏ အစိတ်အပိုင်းတစ်ခုကို အတန်းကိုယ်တိုင် အတွင်း၌ အကောင်အထည်ဖော်နိုင်ပြီး၊ အခြားအစိတ်အပိုင်းတစ်ခုကိုမူ အယ်ဘ်စထရက် (abstract) အဖြစ် ကြေညာကာ အမွေဆက်ခံအတန်းများတွင် အကောင်အထည်ဖော်ရန် လိုအပ်ပါသည်။
သင်၏ အယ်ဘ်စထရက်အတန်းသည် အကောင်အထည်ဖော်ချက်ပါသော လုပ်ဆောင်ချက်များကို မထည့်ဘဲ၊ အယ်ဘ်စထရက် အများသူငှာ (public) လုပ်ဆောင်ချက်များ၏ စုစည်းမှုတစ်ခုသာ ဖြစ်သည့် အခြေအနေကို စိတ်ကူးကြည့်ပါ။
အမှန်တကယ်အားဖြင့် သင်၏ မိဘအတန်း (parent class) သည် အမွေဆက်ခံအတန်းများ၏ interface ကို ဖော်ပြသည်၊ ဆိုလိုသည်မှာ ၎င်းတို့၏ အကောင်အထည်ဖော်ရန် လိုအပ်သော အများသူငှာ လုပ်ဆောင်ချက်များ၏ စုစည်းမှုဖြစ်သည်။
ဤကဲ့သို့လိုအပ်ရသည့် အကြောင်းရင်းမှာ - ပရိုဂရမ်ရေးသားရာတွင် အမှားနည်းအောင် လုပ်ဆောင်နိုင်ရန်အတွက်ဖြစ်သည် - မိဘအတန်းအတွင်း၌ လိုအပ်သော လုပ်ဆောင်ချက်အားလုံးကို ဖော်ပြခြင်းဖြင့်၊ အမွေဆက်ခံအတန်းအားလုံးက ၎င်းတို့ကို အမှန်တကယ် အကောင်အထည်ဖော်မည် မှာ ကျွန်ုပ်တို့ သေချာနိုင်ပါသည်။
ဤသည်က မည်သည့်အခါ ကူညီမည်နည်း - ကျွန်ုပ်တို့၏ မိဘအတန်းနှင့် ၎င်းအတွက် အမွေဆက်ခံအတန်းအနည်းငယ်ကို ဖန်တီးသည်ဆိုပါစို့။ အကယ်၍ တစ်လကဲ့သို့သော ကာလအတန်ကြာပြီးနောက်၊ ကျွန်ုပ်တို့သည် အမွေဆက်ခံအတန်းအသစ်တစ်ခုကို ထပ်မံဖန်တီးရန် ဆုံးဖြတ်ပါက၊ ကျွန်ုပ်တို့၏ ကုဒ်၏ အသေးစိတ်အချက်များကို မေ့သွားမည်မှာ သေချာပြီး အမွေဆက်ခံအတန်းအသစ်တွင် လုပ်ဆောင်ချက်တစ်ခုခုကို ရေးသားရန် မေ့သွားနိုင်ပါသည်။ သို့ရာတွင် PHP ကိုယ်တိုင်က လုပ်ဆောင်ချက်ဆုံးရှုံးခြင်းမှ ကာကွယ်ပေးမည် - ပြီးလျှင် အမှားတစ်ခုကို ရိုးရိုးရှင်းရှင်း ထုတ်ပြန်ပေးမည်ဖြစ်သည်။
အလားတူပင် သင်၏ ပရောဂျက်နှင့် အလုပ်လုပ်နေသော အခြားပရိုဂရမ်မာတစ်ဦးအတွက်လည်း ဖြစ်သည်။ မိဘအတန်း၏ ကုဒ်ကို သင်ရေးသားခဲ့ပြီး၊ သင်၏လုပ်ဖော်ကိုင်ဖက်က အမွေဆက်ခံအတန်းအသစ်တစ်ခုကို ထပ်မံဖန်တီးရန် ဆုံးဖြတ်သည်ဆိုပါစို့။ သင်၏လုပ်ဖော်ကိုင်ဖက် အနေဖြင့်လည်း လုပ်ဆောင်ချက်တစ်ခုနှစ်ခုကို ဆုံးရှုံးရန် မဖြစ်နိုင်ပါ။
သို့ရာတွင် ပြဿနာတစ်ခုရှိသည်- အမှန်တကယ်အားဖြင့် ကျွန်ုပ်တို့သည် မိဘအတန်းကို အယ်ဘ်စထရက် အများသူငှာ လုပ်ဆောင်ချက်များကို ရေးသားရန်အတွက် ဖန်တီးခဲ့သော်လည်း၊ ကျွန်ုပ်တို့ကိုယ်တိုင်သော်လည်းကောင်း၊ ကျွန်ုပ်တို့၏လုပ်ဖော်ကိုင်ဖက်သော်လည်းကောင်း ဤအတန်းအတွင်း အများသူငှာ မဟုတ်သော သို့မဟုတ် အယ်ဘ်စထရက် မဟုတ်သော လုပ်ဆောင်ချက်ကို မတော်တဆ ထည့်သွင်းနိုင်ခြေရှိသည်။
ကျွန်ုပ်တို့သည် မိဘအတန်းအတွင်း အယ်ဘ်စထရက် အများသူငှာ လုပ်ဆောင်ချက်များ မှလွဲ၍ အခြားလုပ်ဆောင်ချက်များကို လုပ်ဆောင်ခြင်းကို ရုပ်ပိုင်းဆိုင်ရာအရ တားမြစ်လိုပါက၊ PHP တွင် အယ်ဘ်စထရက်အတန်းများအစား interface များကို အသုံးပြုနိုင်ပါသည်။
Interface များသည် ၎င်းတို့၏ လုပ်ဆောင်ချက်အားလုံးသည် အများသူငှာဖြစ်ပြီး အကောင်အထည်ဖော်ချက် မရှိသော အတန်းများဖြစ်သည်။ လုပ်ဆောင်ချက်များ၏ ကုဒ်ကို interface များ၏ အမွေဆက်ခံအတန်းများ (classes) မှ အကောင်အထည်ဖော်ရမည်။
Interface များကို သာမန်အတန်းများကဲ့သို့ပင် ကြေညာပါသည်၊ သို့သော်
စကားလုံး class အစား သော့ချက်စကားလုံး interface ကို အသုံးပြုပါသည်။
Interface များမှ အမွေဆက်ခံရာတွင် အနည်းငယ်ကွဲပြားသော ဝေါဟာရကို အသုံးပြုပါသည်-
အတန်းများသည် interface များမှ အမွေမဆက်ခံဟု ဆိုကြပြီး၊ ၎င်းတို့ကို အကောင်အထည်ဖော်သည်
ဟု ဆိုကြသည်။ ထို့ကြောင့် စကားလုံး extends အစား သော့ချက်စကားလုံး
implements ကို အသုံးပြုရပါမည်။
Interface ၏ အော့ဘ်ဂျက် (object) တစ်ခုကို ဖန်တီး၍ မရပါ။ Interface ၏
လုပ်ဆောင်ချက်အားလုံးကို public အဖြစ် ကြေညာရမည်ဖြစ်ပြီး အကောင်အထည်ဖော်ချက်
မရှိရပါ။ Interface တွင် လုပ်ဆောင်ချက်များသာ ရှိနိုင်ပြီး၊ ဂုဏ်သတ္တိများ (properties)
မရှိနိုင်ပါ။ Interface နှင့် အတန်းတစ်ခုကို အမည်တူညီစွာဖြင့် ဖန်တီး၍လည်း မရပါ။