Professional Documents
Culture Documents
Oopbasic PDF
Oopbasic PDF
Table of Contents
Introduction ................................................................................................................................... 2
Class and Object .......................................................................................................................... 5
Visibility & Access Modifiers ......................................................................................................... 8
Inheritance .................................................................................................................................. 11
Static Properties & Methods ....................................................................................................... 16
Interfaces .................................................................................................................................... 22
Abstract Classes ......................................................................................................................... 27
Interface VS Abstract Class ........................................................................................................ 30
Traits ........................................................................................................................................... 39
Magic Methods In PHP ............................................................................................................... 43
__construct ............................................................................................................................. 43
__destruct ............................................................................................................................... 44
__set ....................................................................................................................................... 45
__get ....................................................................................................................................... 46
__toString ............................................................................................................................... 47
Polymorphism ............................................................................................................................. 49
Dependency Injection in PHP ..................................................................................................... 52
Conclusion .................................................................................................................................. 56
Introduction
တယ်။
concept of "objects"
OOP ဆိတ
' ာ objects ဆိတ
' ဲ့ သေဘာတရားေတွေပXမ.ာ အေြခခံထားတဲ့ programming paradigm
သွားတာမျိgးကိေ
' ြပာတာ၊ ဥပမာ နမ>နာေပးရမယ်ဆ'ိ
ဒါဆိလ
' `.
ိ' ့ ိရင် အေပXက code block ထဲမ. variables ေတွပါတယ်၊ [ပီးေတာ့ arithmetic + operator
ကိသ
' း'ံ [ပီးေတာ့ ေပါင်းြခင်းလ'ပ်သာွ းတယ်၊ ေနာက်တစ်ေ1ကာင်းမ.ာ echo ဆိ[' ပီးရလဒ်ကိ' print ထ'တြ် ပ
ရမယ်၊ ဘယ်လလ
ိ' ဆ
ဲ ေ
'ိ တာ့ procedural မ.ာ function ဆိတ
' ာပါလာတယ်၊ function ကိ' သံး' [ပီးေတာ့
မယ်။ ေနာက်တစ်ခေ
' တွx မ.ာက function အေနာက်မာ. ပါလာတဲ့ param ေလးေတွပဲ၊ ေနာက်ပိင
' း် calcul-
ation လ'ပ်တအ
ဲ့ ချိန ် မတ>ညတ
ီ ဲ့ digit ေတွအတွက် addNum လိေခXတဲ
'့ အ ့ ချိနမ
် ာ. တည်းက တစ်ခါတည်း
ထည့ေ
် ပးလိက
' လ
် ရေအာင်
ိ' ့ လပ' ်ေပးထားတယ်။ ဒါေ1ကာငမ
့် ိလိ
' ့ ' procedural
့ နဲဆိ
့ လ
' `.
ိ' ့ ိရင် sequence မ.ာ
အေပXကေြပာခဲတ
့ ဲ့ sequential နဲ ့procedural ဆိတ
' ာ programming paradigm ေတွပဲ၊ paradigm
ကိြ' မန်မာလိဘ
' ာသာြပန်ရရင် ေရးထံး' ပံစ
' ေ
ံ တွေပါ။့ OOP ဆိတ
' ာကလည်း object သေဘာတရားကိ'
ရာမ.ာေကာင်းမွနသ
် ာွ းမယ့အ
် ြပင် တစ်ြခားေသာေကာင်းကျိgးေတွလည်းအများlကီး`.ိပါတယ်။ ဒါေ1ကာင ့်
1ကတာြဖစ်ပါတယ်။
အေပXမ.ာ ကျေနာ်ေြပာခဲသ
့ လိပ
' ဲ OOP ဆိတ
' ာ object သေဘာတရားေတွန ဲ ့ ဖွဲxစည်းထားတယ်ဆတ
'ိ ဲ ့
Class ဆိတ
' ာက object ကိ' ြခံgငံထ
' ားတဲ့ template တစ်ခလ
' ဆိ
ိ' ့ လ
' ရပါတယ်
ိ' ့ ။ ြမင်သာေအာင်`င
. း် ြပရရင်
]ိင
' င
် ံ ဆိတ
' ဲ့ ေဝါဟာရက class ြဖစ်[ပီးေတာ့ ြမန်မာ၊ ဂျပန်၊ အေမရိကန် စတဲ့ အရာေတွက object အြဖစ်
သတ်မတ
. ]
် င
ိ' ပ
် ါတယ်။ တစ်နည်းအားြဖင ့် ဆိရ
' ရင် class ဆိတ
' ာက logicial entity ြဖစ်[ပီးေတာ့ object
ေလးထည့ထ
် ားတယ်၊ value ကိ' Myanmarဆိ[' ပီး တစ်ခါတည်းေပးထားပါတယ်။ ေနာက်တစ်ခ' getNa-
me ဆိတ
' ဲ့ method ေလးေရးထားတယ်၊ သ>ကေတာ့ class ထဲမာ. `.ိတဲ့ name property ကိ' return ြပန်
ြဖစ်လာလဲဆက်1ကည့ရ
် ေအာင်။
လိေခXပါတယ်
'့ ။ country class ကိ' instantiate လ'ပ်[ပီးလိ' ့ရလာတဲ့ myanmar ဆိတ
' ဲ့ variable သည်
ေနာက်တစ်ဆငအ
့် ေနနဲ ့ class ထဲမာ. `.ိေနတဲ့ getName ဆိတ
' ဲ့ method ကိ' myanmar object ကေန
တစ်ဆငေ
့် ခX 1ကည့မ
် ယ်ဆ'ိ return value အေနနဲ ့ myanmar ဆိတ
' ဲ့ string output ြပန်ရလာမ.ာြဖစ်
ထားတာြမင်ပါလိမ်မ
့ ယ်။ လက်`ိအ
. ေြခအေနမ.ာ myanmar object ထဲကေန function ကိလ
' မ
. ်းေခXသ
ေနာက်တစ်ပိင
' း် မ.ာ`.ငး် ြပေပးပါမယ်။
ကျေနာ်တိ' အေပXက
့ code example ေတွကေနတစ်ဆင ့် ေတွx ခဲရ
့ တာက private နဲ public
့ ပဲေတွx ခဲရ
့ ပါ
Public ကိသ
' း'ံ ထားတယ်ဆ'ိ သ>ရဲ့ property
့ ေတွ method ေတွကိ' သ>ကိ
့ ' create လ'ပ်ထားတဲ့ class ရဲ ့
Private ကိသ
' း'ံ ထားတယ်ဆရ
'ိ င်ေတာြ့ ဖင ့် သ>ကိ
့ ' create လ'ပ်ထားတဲ့ class အတွငး် မ.ာပဲ ေခXယ>အသံး'
ြပg]ိင
' မ
် ယ်။ class ရဲ ြပင်
့ ပကေန လ.မ်းေခXသံး' လိမရဘ>
'့ း။
create လ'ပ်ခတ
ဲ့ ဲ့ class ကိ' ြပန် inheritance လ'ပ်ထား class ထဲမာ. ေတာ့ လ.မ်းေခXသံး' ခွင`
့် ိ တ
. ယ်။ မလ'ပ်
ေအာင်၊ ဥပမာ Parent Class ကိ' Child Class ကေန လ.မ်း[ပီး inheritance လ'ပ်သလိမ
' ျိgးေပါ။့
အသံး' ြပg]ိင
' ေ
် နတာပဲြဖစ်ပါတယ်။ ေနာက်ပိင
' း် မ.ာ ဒီအတွက် အပိင
' း် တစ်ပိင
' း် သက်သက်လာမ.ာဆိေ
' တာ့ ဒီ
ေလာက်ပဲသထ
ိ ားရင် အဆင်ေြပပါတယ်။ protected ကိ' inheritance နဲ ့ဘယ်လလ
ိ' မ
. ်းေခXလိရ]ိ
'့ င' မ
် လဲ
ဆိတ
' ာ code example ေလးနဲ တစ်
့ ချက်ဆက်1ကည့ရ
် ေအာင်။
Hlaing ဆိတ
' ဲ့ class ကေန[ပီးေတာ့ Person class ဆီကေန inheritance လ.မ်းလ'ပ်လက
ိ' ပ
် ါတယ်။
ထားတဲအ
့ တွကေ
် 1ကာငသ
့် ာ ဒီလိ' လ.မ်းေခXသံး' ]ိင
' တ
် ာြဖစ်ပါတယ်။ ေအာက်က client code မ.ာ Hlaing
Inheritance
ce အေ1ကာင်းပါ သိမရ
. မ.ာေလးေတွ`ိလ
. ာေတာ့ Inheritance ကိ' ေစာေစာစီးစီးပဲ ေြပာြပထားပါမယ်။
Inheritance လ'ပ်တယ်ဆတ
'ိ ာ တစ်ြခားေတာ့ မဟ'တဘ
် း> ၊ ကျေနာ် အေပXမ.ာလည်း ေြပာခဲတ
့ ာေတာ့ `.ိပါ
ဆီကေန အေမွလက်ခရ
ံ ယ>မယ်ဆ'ိ မိဘေတွပိင
' ဆ
် င
'ိ တ
် ဲ့ အိမ်၊ြခံ၊ကား အစ`.ိတာေတွကိ' ပိင
' ဆ
် င
'ိ ခ
် င
ွ ရ
့် မယ်။
(Inheritance) လ'ပ်လက
ိ' မ
် ယ်ဆရ
'ိ င် Parent Class မ.ာ`.ိေနတဲ့ properties ေတွ methods ေတွကိ' လ.မ်း
method `.ိပါတယ်။ Child class ြဖစ်တဲ့ Man ထဲမာ. ေတာ့ ဘာမ.မ`.ိပါဘ>း၊ ဒါေပမယ့် extends key-
word ေလးကိ' သံး' ထား[ပီး Person class ဆီကေန inheritance လ'ပ်ထားပါတယ်။ ဒါေ1ကာင ့် Person
ဆိတ
' ဲ့ Parent Class ထဲမာ. `.ိတဲ့ property ြဖစ်တဲ့ name နဲ method
့ ြဖစ်တဲ့ getName တိကိ
' ့ ' လ.မ်း[ပီး
ေနာက်တစ်ခထ
' ပ်သထ
ိ ားဖိ'ေကာင်
့ းတာက ေခXယ>အသံး' ြပgoံ'ပဲသာမကပဲ Parent Class ထဲမာ. `.ိတဲ့ met-
တယ်လိ' ဆိ
့ လ
' ခ
ိ' ျင်တာြဖစ်ပါတယ်။
အေပXက နမ>နာေလးကိထ
' ပ်1ကည့ရ
် မယ်ဆ'ိ ပံမ
' န
. ် parent class ထဲမာ. `.ိတဲ့ getName ဆိတ
' ဲ့ method
ဟာ အရင်အတိင
' း် ဆိ' Hlaing ဆိတ
' ာကိပ
' ဲ output ြပန်ေပးမ.ာြဖစ်ပါတယ်၊ ဒါေပမယ့် Man ဆိတ
' ဲ့ child
ြပန်လက
ိ' တ
် အ
ဲ့ တွက် ထွကလ
် ာတဲ့ output သည်လည်း Hlaing သာမဟ'တေ
် တာဘ
့ ဲ Hlaing Tin Htun
ြဖစ်သာွ းပါလိမ်မ
့ ယ်။
methods ေတွကသ
ိ' ာ လ.မ်း[ပီးေတာ့ access လ'ပ်]င
ိ' မ
် ယ်ဆတ
'ိ ာ သတိချပ်ထားရပါမယ်။ ကျေနာ်အေပX
မ.ာ access modifiers အေ1ကာင်း`.ငး် ြပတ'နး် က protected ေတွကိ' ဘယ်လြိ' ပန်ေခX သံး' ]ိင
' တ
် ယ်ဆ'ိ
တာ`.ငး် ြပထား[ပီးသားြဖစ်တအ
ဲ့ တွကေ
် 1ကာင ့် ေနာက်တစ်ေခါက်ထပ်[ပီးေတာ့ ဒီမာ. မေရးြပေတာပ
့ ါဘ>း။
ြပန်1ကည့ရ
် လွယေ
် အာင် code sample ေတာ့ ြပန်ထည့ေ
် ပးထားပါမယ်။
ကိ' parent class အြဖစ်သေဘာထား[ပီး man class ကေနလ.မ်း[ပီး inheritance လ'ပ်ေနတယ်။ ဒါေပ
မယ့် Person class ကိဘ > မ. လာ[ပီး inherit မလ'ပ်ေစချင်ရင်ေရာ ? ဒီေနရာမ.ာ final ဆိတ
' ယ်သက ' ဲ့ key-
word ကိသ
' း'ံ ]ိင
' ပ
် ါတယ်။ final ဆိတ
' ဲ့ keyword ကိသ
' း'ံ လိက
' မ
် ယ်ဆ'ိ ေနာက်ထပ် ဘယ် class ကမ. Pers-
overwriteလ'ပ်]င
ိ' မ
် ာ. မဟ'တေ
် တာဘ
့ e
ဲ rrorတတ်မာ. ြဖစ်ပါတယ်။ ဒီေလာက်ဆ'ိ Inheritanceကိ' သေဘာ
ေပါက်[ပီထင်ပါတယ်။ ေနာက်တစ်ခဆ
' က်သာွ း1ကတာေပါ။့
ပံမ
' န
. အ
် ေပXမ.ာ ကျေနာ်တိ' ေလ့
့ လာခဲတ
့ အ
ဲ့ ရာေတွအရ class ထဲမာ. `.ိတဲ့ properties ေတွ methods ေတွ
မလိဘ
' ဲ တိက
' o
် ' ိ ကေ
် ခXယ>အသံး' ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။ ကျေနာ်တိ' property
့ အေ1ကာင်းအရင်ေလ့လာ1က
ေအာင်။
လိတ
' အ
ဲ့ ချိနမ
် ာ. ေတာ့ country class ကိ' new ဆိ[' ပီး instantiate လ'ပ်စရာမလိေ
' တာဘ
့ ဲ classname,
ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။
အရင်အတိင
' း် static property name `.ိမယ်၊ [ပီးေတာ့ ပံမ
' န
. ် getName ဆိတ
' ဲ့ method တစ်ခ`
' ိမ
. ယ်၊
့ ီ method ထဲမာ. class ထဲမာ. ေ1ကညာထားတဲ့ static property name ကိ' self ဆိတ
အဲဒ ' ဲ့ keyword နဲ ့
instantiate လ'ပ်ဖိ' လိ
့ အ' ပ်တာြဖစ်ပါတယ်။
class က parent class မ.ာ`.ိေနတဲ့ static property ကိ' လ.မ်း access လ'ပ်ေတာမ
့ ယ်ဆ'ိ self ဆိတ
' ဲ့
လိက
' ရ
် မယ်ဆတ
'ိ ာလဲ သတိချပ်ထားရပါမယ်။
အေပXက ေြပာခဲတ
့ ဲ့ static property အလ'ပ်လပ
' ်ပံက
' န
ိ' ားလည်သာွ း[ပီဆ'ိ method အတွကလ
် ည်း အလိ'
ေတာမ
့ ယ်ဆ'ိ classname, double_colon, method_name လာမယ်။ ဒီအတွကဥ
် ပမာတစ်ခ' တစ်ခါ
တည်း1ကည့ရ
် ေအာင်။
အထ>းတစ်လည်`င
. း် ြပစရာမလိေ
' လာက်ေတာဘ
့ း> ထင်ပါတယ်၊ country class ထဲမာ. static method
တစ်ခေ
' 1ကညာထား[ပီးေတာ့ client code မ.ာ class name ကိ' double colon ခံ[ပီးေတာ့ method ကိ'
တိက
' o
် ' ိ ကေ
် ခXယ>အသံး' ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။
Inherit လKပ်ထားတဲ့ child class ကေန parent class ထဲမFာYFိေနတဲ့ method ကိြK ပန်လည်အသံးK ြပT
ပံK
သံး' တဲပ
့ ံစ > ါပဲ၊ self ေနရာမ.ာ parent အြဖစ် အစားထိး' ေြပာင်းလဲသာွ းတာကိပ
' ံ အတ>တပ ' ဲ ြမင်ရမ.ာ
ြဖစ်ပါတယ်။
PHP ကိအ
# သံး# ြပ*၍ လက်ေတွ1 project များကိ# ကိယ
# တ
် င
ိ# က
် ယ
ိ# က
် ျ ေရးသား8ိင
# ေ
် အာင်
A Programmer မ9 သင်:ကားေပးေနပါသည်။
:ကည့@
် A ရန် - https://bit.ly/3kWQlsf
Interfaces
Class ဆိတ
' ာကိ' ရင်း].းီ [ပီးသားဆိရ
' င် Interface ကိလ
' ဲ နားလည်ရလွယမ
် ာ. ပါ။ Interface ဆိတ
' ာ ဟာ
ties ေတွ`ိမ
. ယ်ဆတ
'ိ ာကိ' သတ်မတ
. ေ
် ပးရပါတယ်။
အဲလ
့ ိ' သတ်မတ
. လ
် က
ိ' ြ် ခင်းအားြဖင ့် type တ>တဲ့ class ေတွကိ' group လ'ပ်ေပး]ိင
' ပ
် ါတယ်။ ဥပမာနဲ ့
မ.ာ`.ိ[ပီးေတာ့ တ>ညတ
ီ ဲ့ methods & properties ေတွ`ိ.]င
ိ' ပ
် ါတယ်၊ Myanmar မ.ာလည်း populations
ဆိတ
' ဲ့ property `.ိ]င
ိ' သ
် လိ' Japan မ.ာလည်း populations ဆိတ
' ဲ့ property `.ိပါတယ်။ ].စခ
် လ
' းံ' က
]ိင
' င
် ေ
ံ တွြဖစ်တအ
ဲ့ တွက် ]ိင
' င
် တ
ံ စ်ခမ
' ာ. `.ိသငတ
့် ဲ့ properties & methods ေတွက တ>ည]
ီ င
ိ' တ
် အ
ဲ့ တွက်
(Type တ>တအ
ဲ့ တွက)် Country ဆိတ
' ဲ့ Interface တစ်ခေ
' အာက်ကေန implement လ'ပ်သာွ း]ိင
' မ
် ာ. ြဖစ်
ထ'တလ
် ိ' ရတယ်
့ ဆတ'ိ သ
ဲ့ ေဘာေပါ၊့ Cat ေရာ dog ေရာ animal ေတွြဖစ်[ပီးေတာ့ လမ်းေလŠာက်]င
ိ' မ
် ယ်၊
အစာစား]ိင
' မ
် ယ်ဆတ
'ိ ဲ့ Animal တစ်ေကာင်ရဲ `.့ ိသငတ
့် ဲ့ methods & properties ေတွ`ိ.မာ. ြဖစ်[ပီး Class
လက်`ိမ
. ာ. ေတာ့ interface နာမည်ကိ' country လိေပးထား[ပီ
'့ းေတာ့ အထဲမာ. currentPopulation နဲ ့
isAsianCountry ဆိတ
' ဲ့ methods ].စခ
် က
' ိ' ေတွxရမ.ာြဖစ်ပါတယ်။ တစ်ခသ
' တိထားမိမာ. က အဲဒ
့ ]
ီ စ
. ခ
် လ
' းံ'
မ.ာပဲ`ိပ
. ါမယ်။ လက်`ိအ
. ေြခအေနမ.ာ Myanmar ဆိတ
' ဲ့ concrete class က Country ဆိတ
' ဲ့ interface
ဒါေပမယ့လ
် က်`ိအ
. ေြခအေနမ.ာ Myanmar ဆိတ
' ဲ့ concrete class ထဲမာ. Country Interface ထဲက
Myanmar ဆိတ
' ဲ့ concrete class ကိ' interface ထဲမာ. `.ိတဲ့ methods ေတွအတိင
' း် implementation
လ'ပ်ေပးလိက
' [် ပီြဖစ်ပါတယ်။
Japan ဆိတ
' ဲ့ concrete class အသစ်တစ်ခထ
' ပ်ထည့ထ
် ား[ပီးေတာ့ ထံး' စံအတိင
' း် Country interface
လ'ပ်လရ]ိ
ိ' ့ င
' သ
် ာွ းမ.ာပဲြဖစ်ပါတယ်။ ဒါဆိရ
' င် interface ရဲ အသံ
့ း' ဝင်ပံန
' ဲ ့ အသံး' ြပgပံက
' ိ' နားလည်သာွ းမယ်
ထင်ပါတယ်၊ သ>နအေြခခံ
ဲ့ သေဘာတရားြခင်းဆင်တဲ့ Abstract class ကိဆ
' က်[ပီးေတာေ
့ လ့လာ1က
ပါမယ်။
Abstract Classes
တ>ညတ
ီ ဲ့ method တစ်ခ`
' ိေ
. နပါတယ်။ ဟ'တပ
် ါတယ်၊ isAsianCountry ဆိတ
' ဲ့ method ြဖစ်ပါတယ်၊
].စခ
် လ
' းံ' က Asian country ြဖစ်တအ
ဲ့ တွက် return “true” ြပန်ထားပါတယ်။ ဒီေနရာမ.ာ အဲဒ
့ ီ method
ပဲ`ိခ
. င
ွ ရ
့် တဲအ
့ တွက် Interface အစား Abstract Class ကိေ
' ြပာင်းလဲ[ပီး ဒီလမ
ိ' ျိgးအသံး' ြပg]ိင
' ပ
် ါတယ်။
ေ1ကညာပါမယ်။ ဒါဆိရ
' င် ေနာက်တစ်ဆငအ
့် ေနနဲ abstract
့ class ကိ' ဘယ်လြိ' ပန်ေခXသံး' ]ိင
' မ
် လဲ ဆိတ
' ာ
ကိဆ
' က်1ကည့1် ကရေအာင်။
Abstract class ကိြ' ပန်ေခXသံး' တဲ့ ေနရာမ.ာေတာ့ Interface ကိေ ' ျိgး implements ဆိတ
' ခXသံး' သလိမ ' ဲ့
ေတာတ
့ တ
> ပ
> ဲရေနဦးမ.ာပဲြဖစ်ပါတယ်။ လာမယ့အ
် ပိင
' း် မ.ာ Interface နဲ ့ Abstract class ရဲ ့အဓိကကွာ
ြခားချက်ေတွကေ
ိ' ရးသွားပါမယ်၊ Interface နဲ abstract
့ class ကိပ
' ါ ေနာက်တစ်lကိမ် real world code
အေပXကအပိင
' း် မ.ာတ'နး် ကေတာ့ Interface & Abstract class ကိအ
' ေြခခံo^ေထာငက
့် ေန ေရးသားထား
တယ်၊ Interface ထဲမာ. `.ိတဲ့ method ေတွက abstract method ေတွြဖစ်ရမယ်၊ method ေတွရဲ ့
declaration ပဲ`ိမ
. ယ်၊ implementation မ`.ိရဘ>း။ ေနာက်တစ်ချက်က method ေတွရဲ visibility
့ က
1ကည့ရ
် ေအာင်။
usegmail နဲ usehotmail
့ ဆိ[' ပီး ကျေနာ်မ
့ ာ. service class ].စခ
် `
' ိပ
. ါတယ်၊ Client class တစ်ခ' `.ိပါမယ်။
လာမယ့် အပိင
' း် ေတွမာ. `.ငး် ြပေပးသွားပါမယ်။ လက်`ိမ
. ာ. ေတာ့ Client Class ကိ' instantiate လ'ပ်မယ်
ဆိရ
' င် construct ထဲမာ. `.ိတဲ့ parameter အတွကပ
် ါ တစ်ခါတည်း ထည့ေ
် ပးဖိ' ့ လိတ
' ယ်လိ' ့ေလာေလာ
ရပါမယ်။
ဆိတ
' ဲ့ output ကျေနာ်တရပါတယ်
ိ' ့ ၊ ဟ'တ[် ပီ၊ ဒါဆိ' Gmail မဟ'တဘ
် ဲ Hotmail ကိသ
' း'ံ [ပီးပိချင်
' ့ တယ်
ဆိပ
' ါစိ၊' ့ ဒါဆိရ
' င် client class က constructor ထဲမာ. သွားေြပာင်းေပးဖိ'လိ
့ ပ' ါတယ်။ လက်`ိမ
. ာ. class က
တစ်ခတ
' ည်း `.ိေပမယ့် real world project ေတွမာ. class ေတွအများlကီး ထပ်`ိ.လာ]ိင
' ပ
် ါတယ်။ ဒါ
ေ1ကာင ့် တစ်ခခ
' ေ
' ြပာင်းချင်တင
ိ' း် မ.ာ constructor ကိတ
' က
ိ' o
် ' ိက် သွားထိ[ပီးြပင်ေနရပါမယ်။ ဒီလိ' swap-
mailService ဆိတ
' ဲ့ interface တစ်ခေ
' ဆာက်[ပီး usegmail နဲ usehotmail
့ ဆိတ
' ဲ့ concrete class ေတွ
ဘဲ ဒီလမ
ိ' ျိgး interface ကိ' constructor ထဲမာ. တိက
' o
် ' ိ ကထ
် ည့ထ
် ားလိက
' ပ
် ါမယ်။
ဒီလမ
ိ' ျိgး interface ကိသ
' း'ံ [ပီး modify လ'ပ်[ပီးတဲေ
့ နာက်မာ. ကျေနာ်တအေနနဲ
ိ' ့ ့mail service ကိေ
' ြပာင်း
ချင်တအ
ဲ့ ချိနတ
် င
ိ' း် မ.ာ clientclass ကိ' instantiate လ'ပ်တေ
ဲ့ နရာမ.ာ ကိယ
' သ
် း'ံ ချင်တဲ့ concrete class ကိ'
ထည့ေ
် ပးလိက
' o
် ' ံပါပဲ၊ result ကတ>တပ
> ဲ၊ ဒါေပမယ့် constructor ကိ' manually သွားထိေနစရာမလိ'
ေတာပ
့ ါဘ>း။
class ထဲမာ. define လ'ပ်ထားတဲ့ abstract method ေတွကိ' child class ေတွက မြဖစ်မေန imple-
လိပ
' ံစ
' ပ
ံ ဲ၊ inherit လ'ပ်မယ်၊ abstract method ေတွ implement လ'ပ်မယ်။ abstract class ကဘယ်လိ'
အသံး' ဝင်လဆ
ဲ တ
'ိ ာ ေအာက်က code example ေလးေတွ1ကည့ရ
် ေအာင်။
chickenCurry ဆိတ
' ဲ့ 1ကက်သားဟင်းချက်တဲ့ class တစ်ခ`
' ိတ
. ယ်။ Normal class ေတွပဲေနာ်၊ အထဲမာ.
function 4 ခ'`ိမ
. ယ်။ chickenCurry လိမ
' ျိgးအလားတ> ေနာက်ထပ် class တစ်ခထ
' ပ်မံတည်ေဆာက်ပါ
မယ်။
လိက
' မ
် ယ်ဆ'ိ addSalt ရယ် addPepper ရယ်ဆတ
'ိ ဲ့ တ>တဲ့ methods 2 ခ'ကေ
ိ' တွxရမယ်၊ အဓိကပါဝင်
addSalt & addPepper ကိ' implement လ'ပ်ထားမယ်၊ main ingredients ြဖစ်တဲ့ 1ကက်နဝက်
ဲ ့ ကိ'
Recipe ဆိတ
' ဲ့ abstract class ေလးတစ်ခေ
' ဆာက်လက
ိ' တ
် ယ်။ အဲထ
့ မ
ဲ ာ. ထပ်ေန[ပီး ြပန်သး'ံ လိရတဲ
'့ ့
method ၃ခ'ကတ
ိ' စ်ခါတည်း implement လ'ပ်ထားလိက
' တ
် ယ်၊ ြပန်သး'ံ လိမရတဲ
'့ ့ method ကိေ
' တာ့
ေတာမ
့ ယ်ဆ'ိ Recipe abstract class ကိ' extends လ'ပ်[ပီး ေဆာက်o' ံပဲ။ extends လ'ပ်လက
ိ' [် ပီဆ'ိ
လည်း ကိယ
' လ
် ခ
ိ' ျင်တဲ့ code ေတွ implement လ'ပ်[ပီးေရးလိက
' o
် ' ံပဲ။ ေအာက်ကလိေ
' ပါ။့
Porkcurry ကိလ
' ည်း အေပXက chickenCurry လိပ
' ဲ ထပ်မံအသံး' ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။
အရင်တန
' း် ကေရးခဲတ
့ ဲ့ class အကွ]
ဲ စ
. ခ
် အ
' တိင
' း် လိမ
' ျိgး result ကအတ>တပ
> ဲရတယ်။ ဒါဆိရ
' င် ဘယ်လိ'
].စခ
် ဘ
' ာကွာသွားလဲဆတ
'ိ ာကိ' နိဂံး' ချgပ်ရရင်
• Interface အတွကဆ
် 'ိ implements keyword သံး' တယ်။ abstract class အတွကဆ
် 'ိ extends
Traits
Trait အေ1ကာင်းကိန
' ားလည်ဖိ'အတွ
့ က် Inheritance ရဲ ့ အစိတအ
် ပိင
' း် ေလးတစ်ခက
' ိ' ြပန်ေ]ွးဖိ'လိ
့ ပ' ါ
တယ်။ Inheritance မ.ာ child class ေတွက parent class ဆီကေန inheritance (အေမွလက်ခ)ံ ယ>လိ' ့
တစ်ခထ
' က်ပိတ
' ဲ့ class ေတွကိ' inherit လ'ပ်ချင်[ပီဆ'ိ ပံမ
' န
. ် inheritance မလ'ပ်ဘဲ trait ကိ' အသံး' ြပg
class တစ်ခလ
' ပ
ိ' ဲ methods & properties ေတွကိ' လိသ
' လိေ
' 1ကညာလိရ]ိ
'့ င' တ
် အ
ဲ့ ြပင် visibility ကိ'
လည်း သတ်မတ
. ]
် င
ိ' မ
် ာ. ြဖစ်ပါတယ်။ ကျေနာ်တိ' trait
့ တစ်ခ' စ[ပီးေတာ့ ေဆာက်1ကည့ရ
် ေအာင်။
အဲဒ
့ ီ trait ကိ' ယ>သး'ံ ထားပါတယ်။
ေနာက်ဆး'ံ အေနနဲကေတာ
့ ့ client code က သံး' ချင်တာကိ' Client class ကိ' instantiate လ'ပ်[ပီးသံး'
oံ'ပါပဲ၊ဒါေတွကေတာသ
့ [ိ ပီးသားြဖစ်တအ
ဲ့ တွကက
် ျေနာ်အထ>းတစ်လည်မ`.ငး် ြပေတာပ
့ ါဘ>း။ ေနာက်တစ်
ဆငအ
့် ေနနဲ တစ်
့ ခထ' က်ပိတ
' ဲ့ trait ေတွေဆာက်1ကည့[် ပီး ေခXသံး' 1ကည့ပ
် ါမယ်။
Trait ရဲသေဘာတရားက
့ လွယက
် o
> ' ိး`.ငး် တဲအ
့ ြပင် အသံး' ဝင်တအ
ဲ့ တွက် အေရးlကီးပါတယ်။ PHP Fra-
ရမ.ာြဖစ်ပါတယ်။
A Programmer ရဲ online
့ class မ9တစ်ဆငေ
့် လ့လာ8ိင
# ပ
် ါတယ်။
:ကည့@
် A ရန် - https://bit.ly/3293gjG
ဒီတစ်ပိင
' း် မ.ာေတာ့ PHP မ.ာ`.ိတဲ့ magic methods ေတွအေ1ကာင်းေရးသွားမ.ာြဖစ်ပါတယ်။ OOP
အေြခခံအတွကေ
် ရးေနတာြဖစ်ေပမယ့် PHP နဲေရးေနတာဆိ
့ ေ
' တာ့ magic methods ေလးေတွ
ေတွြဖစ်ပါတယ်၊ အေခXအေဝXအရဆိရ
' င်ေတာ့ magic methods ေတွြဖစ်ပါတယ်။ magic methods
ေတွတင
ိ' း် ရဲ အေ`.
့ x မ.ာ __(double underscore) ပါ[ပီးေတာ့ အဲဒ
့ ီ magic methods ေတွဟာ သတ်မတ
. ်
ထဲမာ. ကျေနာ်တတစ်
ိ' ့ ခက
' ိ' သိ[ပီးခဲပ
့ ါ[ပီ။ (__construct) ဆိတ
' ဲ့ PHP magic method ေလးပါ။ အေ`. x မ.ာ
__construct
Person ဆိတ
' cဲ့ lass ေလးထဲမာ. magic method တစ်ခြ' ဖစ်တဲ့ construct ကိတ
' ည်ေဆာက်ထား[ပီး
ေတာ့ property တစ်ခ' assign လ'ပ်ေပးထားပါတယ်။ client code မ.ာ person class ကိ' instantiate
လ'ပ်လက
ိ' တ
် ာနဲ ့ construct magic method ကိ' trigger ြဖစ်ထားတဲအ
့ တွက် construct method
အက'နလ
် းံ' ကိ' မေဖာ်ြပ]ိင
' တ
် အ
ဲ့ တွက် အသံး' များတဲ့ magic methods တစ်ချိg xပဲေရးြပသွားပါမယ်။
မ.တထ
် ားရမ.ာက PHP magic methods ေတွက ဘယ်လသ
ိ' တ်မတ
. ထ
် ားတယ်၊ ဘယ်အချိနေ
် တွမာ.
trigger ြဖစ်တယ်ဆတ
'ိ ဲ့ သေဘာတရားပဲြဖစ်ပါတယ်။ trigger လ'ပ်မယ့အ
် ချိနေ
် တွက documentation
ဖတ်လက
ိ' ရ
် င် နားလည်]င
ိ' တ
် အ
ဲ့ တွက် သေဘာတရားကိသ
' ာ မ.တထ
် ား]ိင
' ရ
် င် အဆင်ေြပပါတယ်။
__destruct
ြဖစ်တအ
ဲ့ ချိနမ
် ာ. trigger ြဖစ်ပါတယ်။ ဘယ်လအ
ိ' ချိနေ
် တွမာ. အသံး' ဝင်လဆ
ဲ ေ
'ိ တာ့ ကိယ
' ့် class ထဲမာ.
class ကိမ
' ပိတသ
် ာွ းခင်မာ. shutdown လ'ပ်စရာ`.ိတဲ့ task ေတွကိ' ေရးတဲေ
့ နရာမ.ာ အသံး' ဝင်ပါတယ်။
ဥပမာ
Sample class ထဲက construct ထဲမာ. fopen operation လ'ပ်ထားခဲ[့ ပီးေတာ့ class ကိ' terminate
ြဖစ်မယ့အ
် ချိနမ
် ာ. trigger ြဖစ်မယ့် destruct magic method ထဲမာ. close လ'ပ်တဲ့ operation ကိ'
ေရးထားခဲလ
့ ရပါတယ်
ိ' ့ ။ ထိန
' ည်းလည်းေကာင်းပဲ၊ တစ်ြခားေသာ ပံစ
' တ
ံ > operations ေတွကလ
ိ' ည်း
__set
Set magic method ကေတာ့ define လ'ပ်ထားြခင်းမ`.ိတဲ့ property ေတွ၊ access လ'ပ်လမရ]ိ
ိ' ့ င
' တ
် ဲ့
]ိင
' ပ
် ါတယ်။ code sample ကိ1' ကည့ရ
် င် ပိြ' မင်သာွ းပါမယ်။
ပံမ
' န
. ဆ
် 'ိ person class ထဲမာ. name ဆိတ
' ဲ့ property ကမ`.ိေပမယ့လ
် ည်း လိသ
' လိ' value ကိ' assign
လ'ပ်ေပး]ိင
' မ
် ာ. ြဖစ်ပါတယ်။ ဒီေနရာမ.ာ name property က protected တိ' ့ private တိြဖစ်
' ့ ေနမယ်
ဆိရ
' င်လည်း ပံမ
' န
. ဆ
် 'ိ inaccessible ြဖစ်တဲ့ property ကိလ
' မ
. ်းေခXမယ်ဆရ
'ိ င် error တတ်]င
ိ' ေ
် ပမယ့် set
__get
Set မ.ာတ'နး် ကေတာ့ inaccessible or undefined property ေတွကိ' value assign လ'ပ်တေ
ဲ့ နရာမ.ာ
သံး' ခဲပ
့ ါတယ်။ get မ.ာေတာ့ ေြပာင်းြပန်သေဘာတရားြဖစ်[ပီးေတာ့ inaccessible or undefined ြဖစ်
ေလးကိပ
' ဲ get magic method ထည့[် ပီး example 1ကည့1် ကည့ရ
် ေအာင်။
__toString
Object တစ်ခက
' ိ' string လိ' display လ'ပ်ချင်တအ
ဲ့ ချိနမ
် ာ. toString ဆိတ
' ဲ့ magic method ကိ'
Person class ကိ' instantiate လ'ပ်ထားတဲ့ person object ကိ' string လိမ
' ျိgး echo နဲ display
့ လ'ပ်မယ်
လိမ
' ျိgးအသံး' ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။ for example
အသံး' များတဲ့ magic methods ေတွြဖစ်ပါတယ်။ တစ်ြခားေသာ real world မ.ာအသံး' ဝင်တဲ့ magic
တယ်။
https://www.php.net/manual/en/language.oop5.magic.php
အဓိကရည်ရွယခ
် ျက်ကေတာ့ ဘယ်အချိနမ
် ာ. ဘယ်လိ' magic methods ေတွကအသံး' ဝင်]င
ိ' တ
် ယ်ဆ'ိ
တာကိန
' ားလည်[ပီးေတာ့ အသံး' ချ]ိင
' ဖ
် ိ'ပဲ့ ြဖစ်ပါတယ်။
Polymorphism
Polymorphism ဆိတ
' ာစကားလံး' အေခXအေဝXအရသာo^ ပ်သေယာင်`ိေ
. ပမယ့် တစ်ကယ်တမ်းေတာ့ အဲ့
ptable (အဆင်ေြပေအာင်လပ
' ်ေဆာင်]င
ိ' စ
် မ
ွ ်း) ြဖစ်ေအာင် လ'ပ်ေဆာင်ေပးပါတယ်။ ကျေနာ်တိ' ့ အေပX
မ.ာသင်ခတ
ဲ့ ဲ့ inheritance အေပXမ>တည်[ပီး polymorphism example တစ်ခ' တစ်ခါတည်း 1ကည့1် က
ရေအာင်။
အစားတ>တအ
ဲ့ တွက် country interface ကိ' share သံး' ထားေပမယ့် အထဲမာ. ပါတဲ့ talk ဆိတ
' ဲ့ function
ကေတာ့ ]ိင
' င
် က
ံ လ
ိ' က
ိ' [် ပီး ကွြဲ ပား]ိင
' ပ
် ါတယ်။
Interface တစ်ခက
' ိ' အမျိgးအစားတ>လိ' ့share သံး' ေပမယ့် ပါဝင်တဲ့ functions ေတွက မတ>ကြွဲ ပားတာ
ကိ' ဆိလ
' ြိ' ခင်းြဖစ်ပါတယ်။ အခ'ေတွx ခဲရ
့ တာကိ' Dynamic Polymorphism လိေခX
'့ [ပီးေတာ့ ေနာက်
ြဖငတ
့် ည်ေဆာက်]င
ိ' ပ
် ါတယ်။
Talk ဆိတ
' ဲ့ class ထဲမာ. magic method __call ကိအ
' သံး' ြပg[ပီး arguments မတ>တဲ့ function call
ေတွအတွက် မတ>ညတ
ီ ဲ့ results ေတွ return ြပန်ေပးထားပါတယ်။ lang ဆိတ
' ဲ့ function ကိေ
' ခXရင်
argument တစ်ခပ
' ါတယ်ဆ'ိ return result ကတစ်မျိgး၊ argument ].စခ
် ဆ
' 'ိ return result ကတစ်မျိgး
ရလာမ.ာြဖစ်ပါတယ်။ ဒီလမ
ိ' ျိgး function arguments ေပXမ>တည်[ပီး ေြပာင်းလဲသာွ း]ိင
' တ
် ာကိ' static
polymorphism လိေခXပါတယ်
'့ ။
https://www.php.net/manual/en/language.oop5.overloading.php#object.call
it depends on.
တစ်ခက
' ိ' လက်ခထ
ံ ားတာကိ' DI လိေခXပါတယ်
'့ တဲ့ (I know it’s a crazy translation :3) ။ ေြပလည်
တိင
' ် create မလ'ပ်ဘဲ တစ်ြခား resources တစ်ခဆ
' က
ီ ေန တိက
' o
် ' ိ ကယ
် သ
> း'ံ တာမျိgးကိ' ဆိလ
' ြိ' ခင်း ြဖစ်
ေတာမ
့ ယ်ဆပ
'ိ ါစိ၊' ့ Dinner ဆိတ
' ဲ့ class `.ိမယ်၊ စားတာကဟ'တ[် ပီ၊ ဘာစားမ.ာလဲေပါ။့ ဒါဆိရ
' င် food ဆိ'
Food ဆိတ
' ဲ့ class စေဆာက်လက
ိ' ပ
် ါ[ပီ။ Food ကေတာ့ Dinner ဆိတ
' ဲ့ class ကလိအ
' ပ်တဲ့ food ကိ'
ြပန်လပ
' ်ေပးမ.ာြဖစ်ပါတယ်။ ဒါဆိ' ေနာက်ထပ် dinner class ကိ' ေဆာက်ရေအာင်။
မ.ာဘာေတွ မေကာင်းဘ>းလဲဆေ
'ိ တာ့ Dinner class ထဲမာ. တင် Food class ကိ' new နဲ instantiate
့ လ'ပ်
ထားတဲအ
့ တွက် Tight coupling ြဖစ်ေနပါတယ်၊ ဆိလ
' ခ
ိ' ျင်တာက food class ကိအ
' ေသချိတထ
် ား
ထည့ေ
် ပးထားရပါတယ်။ ဒီလိ' issues ေတွကိ' dependency injection ကိ' အသံး' ြပg[ပီးေတာေ
့ ြဖ`.ငး်
]ိင
' ပ
် ါတယ်။ DI သံး' [ပီးေတာ့ Dinner class ကိ' ြပန်ြပင်ေရး1ကည့ပ
် ါမယ်။
ေဆာက်လက
ိ' ပ
် ါတယ်၊ parameter ထဲမာ. ေတာ့ food object ကိလ
' က်ခဖ
ံ ိ' ထည့
့ ေ
် ပးထားပါတယ်။
ဒါဆိရ
' င် client code ကေန[ပီးေတာ့ လိအ
' ပ်တဲ့ food class ကိ' instantiate လ'ပ်[ပီးေတာ့ dinner class
createလ'ပ်စရာမလိေ
' တာတ
့ အ
ဲ့ တွက် tight couplingမြဖစ်ေတာတ
့ အ
ဲ့ ြပင် hardcode-declaring ေတွ
ကိပ
' ါ reduce လ'ပ်]င
ိ' သ
် ာွ း[ပီပဲြဖစ်ပါတယ်။ အစမ.ာေြပာခဲတ
့ ဲ့ definition ကိြ' ပန်ေကာက်ရရင် dinner
class ကသ>လအ
ိ' ပ်တဲ့ food dependency class ကိက
' ယ
ိ' တ
် င
ိ' ် create လ'ပ်ြခင်းမ`.ိဘတ
ဲ စ်ြခားေသာ
inject လ'ပ်လက
ိ' တ
် ယ်လဆိ
ိ' ့ လ
' ြိ' ခင်းြဖစ်ပါတယ်။
အခ'လက်`ိေ
. ရးလိက
' တ
် ဲ့ example မ.ာေတာ့ dependency injection ကိ' constructor ကေန တစ်ဆင ့်
လ'ပ်လက
ိ' ေ
် ပမယ့် constructor တင်မဟ'တဘ
် ဲ တစ်ြခားေသာ setter methods ေတွ interface ေတွမ.
တစ်ဆငလ
့် ည်း လ'ပ်ေဆာင်]င
ိ' ပ
် ါတယ်။
Conclusion
လာဆဲ လ>တစ်ေယာက်ြဖစ်တအ
ဲ့ တွက် လိအ
' ပ်တာေလးေတွေတွxရင်လည်း ဝင်ေရာက်ြဖည့စ
် ကွ ေ
် ပး]ိင
' ်
မယ်လိ' ေမŠာ်
့ လငပ
့် ါတယ်။
ေကျးဇ>းတင်ပါတယ်။
မ9တစ်ဆငေ
့် လ့လာ8ိင
# ေ
် နပါGပီ။
သင်တန်းများကိ# :ကည့@
် A ရန် - https://bit.ly/385lLsZ