Download as pdf or txt
Download as pdf or txt
You are on page 1of 56

OOP Basic: TOC A Programmer Ó 2020

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

Not for sale 1


OOP Basic: Introduction A Programmer Ó 2020

Introduction

ဒီစာအ'ပ်ေလးမ.ာ OOP အေ1ကာင်းေြပာမ.ာဆိေ


' တာ့ OOP ဆိတ
' ာကိအ
' ရင် မိတဆ
် က်ေပးပါမယ်။ သ>ရဲ့ ့

long form ကေတာ့ object-oriented programming ြဖစ်ပါတယ်။ Wiki ကေတာ့ ဒီလေ


ိ' ြပာထားပါ

တယ်။

Object-oriented programming (OOP) is a programming paradigm based on the

concept of "objects"

OOP ဆိတ
' ာ objects ဆိတ
' ဲ့ သေဘာတရားေတွေပXမ.ာ အေြခခံထားတဲ့ programming paradigm

တစ်ခြ' ဖစ်ပါတယ်ဆ['ိ ပီးေတာ့ ေြပာထားပါတယ်။ ဒီေနရာမ.ာ programming paradigm ဆိတ


' ဲ့ အသံး'

အ]^နး် ကိ' ဆက်[ပီးေတာ့ ကျေနာ်`င


. း် ြပပါမယ်။ နားလည်ရလွယတ
် ဲ့ sequential နဲ procedural
့ progra-

mming အေ1ကာင်းကိ' ဥပမာေပး[ပီးေြပာပါမယ်။

Sequential programming ဆိတ


' ာက code လိင
' း် ေတွကိ' statement တစ်ခြ' ခင်းဆီ execution လ'ပ်

သွားတာမျိgးကိေ
' ြပာတာ၊ ဥပမာ နမ>နာေပးရမယ်ဆ'ိ

Not for sale 2


OOP Basic: Introduction A Programmer Ó 2020

ဒါဆိလ
' `.
ိ' ့ ိရင် အေပXက code block ထဲမ. variables ေတွပါတယ်၊ [ပီးေတာ့ arithmetic + operator

ကိသ
' း'ံ [ပီးေတာ့ ေပါင်းြခင်းလ'ပ်သာွ းတယ်၊ ေနာက်တစ်ေ1ကာင်းမ.ာ echo ဆိ[' ပီးရလဒ်ကိ' print ထ'တြ် ပ

တယ်။ အခ'ြပထားတာ sequential programming ရဲ နမ>


့ နာတစ်ခ၊' ဒီေနရာမ.ာေြပာစရာ`.ိတာက ေပါင်း

ရမယ့် number operation ေနာက်တစ်lကိမ်ထပ်လပ


' ်ရမယ်ဆလ
'ိ ဲ ဒီလမ
ိ' ျိgး code ထပ်ေရးရဦးမ.ာပဲ။ ဒီ

ေနရာမ.ာ procedural programming ဆိတ


' ာက အသံး' ဝင်လာတယ်။

Procedural programming ကေတာ့ sequential ရဲ ့အားနည်းချက်ေတွက cover လ'ပ်ေပးသွား]ိင


' ်

တယ်။ sequential နဲေရးလာမယ်


့ ဆ'ိ ေနာက်ပိင
' း် မ.ာ ကိယ
' ့် project code ေတွကတစ်အားo^ ပ်လာမယ်။

code line ေတွမလိအ


' ပ်ဘတ
ဲ စ်အားများလာလိမ်မ
့ ယ်။ အဲလ
့ ိ' ြပသနာေတွကိ' procedural နဲေြဖ`.
့ ငး် လိ' ့

ရမယ်၊ ဘယ်လလ
ိ' ဆ
ဲ ေ
'ိ တာ့ procedural မ.ာ function ဆိတ
' ာပါလာတယ်၊ function ကိ' သံး' [ပီးေတာ့

sequence code ေတွကစ


ိ' စ
' စ
' ည်းစည်းထားလိက
' မ
် ယ်ဆ'ိ ေနာက်တစ်lကိမ် အလားတ> logic ေတွလာ[ပီ

ဆိ' functionေလးကိ' reuse လ'ပ်လက


ိ' o
် ' ံပဲ၊ မလိအ
' ပ်တဲ့ code ေတွေလျာခ
့ ျ]ိင
' သ
် လိ' complexity လည်း

နည်းသွားမယ်။ ဥပမာ အေပXက sequential ကိ' procedural အြဖစ်ေြပာင်းမယ်ဆ'ိ

ေခXသံး' ချင်[ပီဆ'ိ addNum(1,2) ဆိ[' ပီးေခXလိက


' o
် ' ံပဲ၊ ဒါဆိလ
' `.
ိ' ့ ိရင် ေနာက် plus operation ေတွ`ိတ
. င
ိ' း်

မ.ာ sequence မ.ာတ'နး် ကလိ' လိင


' း် ၄ေ1ကာင်းေရးစရာမလိေ
' တာဘ
့ ဲ တစ်ေ1ကာင်းတည်းနဲ ြပတ်
့ သာွ းလိက
' ်

မယ်။ ေနာက်တစ်ခေ
' တွx မ.ာက function အေနာက်မာ. ပါလာတဲ့ param ေလးေတွပဲ၊ ေနာက်ပိင
' း် calcul-

ation လ'ပ်တအ
ဲ့ ချိန ် မတ>ညတ
ီ ဲ့ digit ေတွအတွက် addNum လိေခXတဲ
'့ အ ့ ချိနမ
် ာ. တည်းက တစ်ခါတည်း

Not for sale 3


OOP Basic: Introduction A Programmer Ó 2020

ထည့ေ
် ပးလိက
' လ
် ရေအာင်
ိ' ့ လပ' ်ေပးထားတယ်။ ဒါေ1ကာငမ
့် ိလိ
' ့ ' procedural
့ နဲဆိ
့ လ
' `.
ိ' ့ ိရင် sequence မ.ာ

1ကံgလာရမယ့် code ထပ်မယ့် ြပဿနာ ေတွကေ


ိ' `.ာင်လရသွ
ိ' ့ ားလိက
' မ
် ယ်။

အေပXကေြပာခဲတ
့ ဲ့ sequential နဲ ့procedural ဆိတ
' ာ programming paradigm ေတွပဲ၊ paradigm

ကိြ' မန်မာလိဘ
' ာသာြပန်ရရင် ေရးထံး' ပံစ
' ေ
ံ တွေပါ။့ OOP ဆိတ
' ာကလည်း object သေဘာတရားကိ'

အေြခခံထားတဲ့ paradigm တစ်ခပ


' ဲ၊ သ>မ.့ ာပါတဲ့ ေရးထံး' ေတွကေ
ိ' တာ့ ကျေနာ်တိ' ့ တစ်ြဖည်းြဖည်းြခင်း

ေလ့လာသွား1ကတာေပါ။့ အဓိကကေတာ့ OOP မ.ာ`.ိတဲ့ ေရးထံး' ပံစ


' ေ
ံ တွေ1ကာင ့် code ေရးရတဲေ
့ နရာ

မ.ာပိ[' ပီးေတာ့ သပ်သပ်ရပ်ရပ်ြဖစ်သာွ းမယ်၊ ထိနး် သိမ်းရတာပိလ


' ယ
ွ [် ပီးေတာ့ ြပန်လည်အသံး' ြပgရတဲ့ ေန

ရာမ.ာေကာင်းမွနသ
် ာွ းမယ့အ
် ြပင် တစ်ြခားေသာေကာင်းကျိgးေတွလည်းအများlကီး`.ိပါတယ်။ ဒါေ1ကာင ့်

လည်း programming language အားလံး' တိင


' း် လိလ
' မ
ိ' ာ. OOP ဆိတ
' ဲ့ ေရးထံး' ကိ' support လ'ပ်လာခဲ့

1ကတာြဖစ်ပါတယ်။

Not for sale 4


OOP Basic: Class & Object A Programmer Ó 2020

Class and Object

အေပXမ.ာ ကျေနာ်ေြပာခဲသ
့ လိပ
' ဲ OOP ဆိတ
' ာ object သေဘာတရားေတွန ဲ ့ ဖွဲxစည်းထားတယ်ဆတ
'ိ ဲ ့

အတွက် class နဲ ့ object ဆိတ


' ာ OOP ရဲ ့ အဓိက ပင်မေထာက်တင
ိ' ေ
် တွလိ' ့ သတ်မတ
. လ
် ရပါတယ်
ိ' ့ ။

Class ဆိတ
' ာက object ကိ' ြခံgငံထ
' ားတဲ့ template တစ်ခလ
' ဆိ
ိ' ့ လ
' ရပါတယ်
ိ' ့ ။ ြမင်သာေအာင်`င
. း် ြပရရင်

]ိင
' င
် ံ ဆိတ
' ဲ့ ေဝါဟာရက class ြဖစ်[ပီးေတာ့ ြမန်မာ၊ ဂျပန်၊ အေမရိကန် စတဲ့ အရာေတွက object အြဖစ်

သတ်မတ
. ]
် င
ိ' ပ
် ါတယ်။ တစ်နည်းအားြဖင ့် ဆိရ
' ရင် class ဆိတ
' ာက logicial entity ြဖစ်[ပီးေတာ့ object

ကေတာ့ physical entity အြဖစ်တည်`ိပ


. ါတယ်။ ]ိင
' င
် ံ ဆိတ
' ေ
ဲ့ ဝါဟာရဟာ အြပင်မာ. လက်ေတွxမ`.ိပါ

ဘ>း။ စကားလံး' ေဝါဟာရအြဖစ်သာ logical entity အြဖစ်သတ်မတ


. ထ
် ားတာြဖစ်[ပီးေတာ့ ြမန်မာ ဆိတ
' ဲ့

အရာကေတာ့ လက်ေတွx မ.ာ တစ်ကယ်တည်`ိတ


. ဲ့ physical entity ြဖစ်ပါတယ်။ ေနာက်တစ်ခ' ဥပမာ

ထပ်ေပးရရင် Animal ဆိတ


' ဲ့ class မ.ာ dog, cat, bird အစ`.ိတဲ့ object ေတွ`ိသ
. လိမ
' ျိgးေပါ။့ ေအာက်က

code example ေလးကိဆ


' က်1ကည့ရ
် ေအာင်။

ကျေနာ် country ဆိ[' ပီး class ေလးတစ်ခေ


' ဆာက်ထားပါတယ်။ class ထဲမာ. name ဆိတ
' ဲ့ property

ေလးထည့ထ
် ားတယ်၊ value ကိ' Myanmarဆိ[' ပီး တစ်ခါတည်းေပးထားပါတယ်။ ေနာက်တစ်ခ' getNa-

Not for sale 5


OOP Basic: Class & Object A Programmer Ó 2020

me ဆိတ
' ဲ့ method ေလးေရးထားတယ်၊ သ>ကေတာ့ class ထဲမာ. `.ိတဲ့ name property ကိ' return ြပန်

ေပးပါမယ်။ ဒါကoိ'းoိ'း`.ငး် `.ငး် class ေလးတစ်ခြ' ဖစ်ပါတယ်။ အဲဒ


့ ီ class ကေန object ဆိတ
' ာဘယ်လိ'

ြဖစ်လာလဲဆက်1ကည့ရ
် ေအာင်။

Country class ရဲ ေအာက်


့ မာ. Myanmar ဆိတ
' ဲ့ variable ေလးတစ်ခေ
' ဆာက်ထား[ပီး new ဆိတ
' ဲ့ key-

word နဲ ့country class ကိလ


' မ
. ်းေခXထားပါတယ်။ ဒီလမ
ိ' ျိgးလ'ပ်တဲ့ process ကိ' instantiate လ'ပ်တယ်

လိေခXပါတယ်
'့ ။ country class ကိ' instantiate လ'ပ်[ပီးလိ' ့ရလာတဲ့ myanmar ဆိတ
' ဲ့ variable သည်

object ြဖစ်ပါတယ်။ var_dump နဲ ့ ထ'တ1် ကည့မ


် ယ်ဆ'ိ country object တစ်ခရ
' လာမ.ာြဖစ်ပါတယ်။

ေနာက်တစ်ဆငအ
့် ေနနဲ ့ class ထဲမာ. `.ိေနတဲ့ getName ဆိတ
' ဲ့ method ကိ' myanmar object ကေန

တစ်ဆငေ
့် ခX 1ကည့မ
် ယ်ဆ'ိ return value အေနနဲ ့ myanmar ဆိတ
' ဲ့ string output ြပန်ရလာမ.ာြဖစ်

ပါတယ်။ ဒါကေတာ့ oိ'းoိ'း`.ငး် `.ငး် `.ငး် class and object ပဲြဖစ်ပါတယ်။

Not for sale 6


OOP Basic: Class & Object A Programmer Ó 2020

အေပXက code ေလးထဲမာ. property ကိ' private လိေပးထား[ပီ


'့ း method ကိ' public function လိေပး
'့

ထားတာြမင်ပါလိမ်မ
့ ယ်။ လက်`ိအ
. ေြခအေနမ.ာ myanmar object ထဲကေန function ကိလ
' မ
. ်းေခXသ

လိ' property ကိ' myanmar->name လိလ.


' ့ မ်းေခXမယ်ဆရ
'ိ င် error တတ်ပါလိမ်မ
့ ယ်။ ဘာလိလဲ
' ့ ဆတ
'ိ ာ

ေနာက်တစ်ပိင
' း် မ.ာ`.ငး် ြပေပးပါမယ်။

Not for sale 7


OOP Basic: Visibility & Access Modifiers A Programmer Ó 2020

Visibility & Access Modifiers

ကျေနာ်တိ' အေပXက
့ code example ေတွကေနတစ်ဆင ့် ေတွx ခဲရ
့ တာက private နဲ public
့ ပဲေတွx ခဲရ
့ ပါ

ေသးတယ်။ ဒါေလးေတွကိ' access modifiers ေတွလေခX


ိ' ့ [ပီးေတာ့ public, protected & private

ဆိ[' ပီးသံး' မျိgး`.ိပါတယ်။

Public ကိသ
' း'ံ ထားတယ်ဆ'ိ သ>ရဲ့ property
့ ေတွ method ေတွကိ' သ>ကိ
့ ' create လ'ပ်ထားတဲ့ class ရဲ ့

ြပင်ပကေနလည်း လ.မ်း[ပီးေတာ့ ေခXယ>အသံး' ြပgလိရတယ်


'့ ။

Private ကိသ
' း'ံ ထားတယ်ဆရ
'ိ င်ေတာြ့ ဖင ့် သ>ကိ
့ ' create လ'ပ်ထားတဲ့ class အတွငး် မ.ာပဲ ေခXယ>အသံး'

ြပg]ိင
' မ
် ယ်။ class ရဲ ြပင်
့ ပကေန လ.မ်းေခXသံး' လိမရဘ>
'့ း။

Public & private ကိပ


' ဲအရင် ဥပမာ 1ကည့ရ
် ေအာင်။

Not for sale 8


OOP Basic: Visibility & Access Modifiers A Programmer Ó 2020

Protected ကလည်း private နဲသေဘာတရား


့ အတ>တပ
> ဲ။ ဒါေပမယ့် protected ကေတာ့ မ>လသ>ကိ
့ '

create လ'ပ်ခတ
ဲ့ ဲ့ class ကိ' ြပန် inheritance လ'ပ်ထား class ထဲမာ. ေတာ့ လ.မ်းေခXသံး' ခွင`
့် ိ တ
. ယ်။ မလ'ပ်

ထားရင်ေတာ့ ေခXသံး' ခွငမ


့် `.ိဘး> ။ ဒီေနရာမ.ာ ကျေနာ် inheritance ဆိတ
' ာကိေ
' ြပာသွားတယ်။ ေလာေလာ

ဆယ်မာ. inheritance ဆိတ


' ာ အေမွဆက်ခယ
ံ ထ
> ားတဲ့ class အြဖစ်ဘဲ ကျေနာ်တိ' ့ သတ်မတ
. ထ
် ားရ

ေအာင်၊ ဥပမာ Parent Class ကိ' Child Class ကေန လ.မ်း[ပီး inheritance လ'ပ်သလိမ
' ျိgးေပါ။့

အေပXက ဥပမာ ကိ1' ကည့မ


် ယ်ဆ'ိ childclass မ.ာ property name ကမ`.ိေပမယ့် ParentClass ဆီကေန

တစ်ဆင ့် အေမွဆက်ခ(ံ Inheritance) ထားတဲအ


့ တွက် Parent ထဲမာ. `.ိတဲ့ property ကိပ
' ါ လ.မ်း[ပီးေတာ့

အသံး' ြပg]ိင
' ေ
် နတာပဲြဖစ်ပါတယ်။ ေနာက်ပိင
' း် မ.ာ ဒီအတွက် အပိင
' း် တစ်ပိင
' း် သက်သက်လာမ.ာဆိေ
' တာ့ ဒီ

ေလာက်ပဲသထ
ိ ားရင် အဆင်ေြပပါတယ်။ protected ကိ' inheritance နဲ ့ဘယ်လလ
ိ' မ
. ်းေခXလိရ]ိ
'့ င' မ
် လဲ

ဆိတ
' ာ code example ေလးနဲ တစ်
့ ချက်ဆက်1ကည့ရ
် ေအာင်။

Not for sale 9


OOP Basic: Visibility & Access Modifiers A Programmer Ó 2020

Hlaing ဆိတ
' ဲ့ class ကေန[ပီးေတာ့ Person class ဆီကေန inheritance လ.မ်းလ'ပ်လက
ိ' ပ
် ါတယ်။

Hlaing class ထဲမာ. public function တစ်ခေ


' ဆာက်[ပီးေတာ့ Person class က protected property

ြဖစ်တဲ့ age ကိ' this ဆိတ


' ဲ့ keyword ေလးသံး' [ပီးေတာ့ echo ထ'တလ
် က
ိ' ပ
် ါတယ်။ inheritance လ'ပ်

ထားတဲအ
့ တွကေ
် 1ကာငသ
့် ာ ဒီလိ' လ.မ်းေခXသံး' ]ိင
' တ
် ာြဖစ်ပါတယ်။ ေအာက်က client code မ.ာ Hlaing

class ကိ' instantiate လ'ပ်[ပီးေတာ့ public function ြဖစ်တဲ့ output ကိလ


' မ
. ်းေခXလိက
' မ
် ယ်ဆ'ိ Person

class မ.ာ protected ြဖစ်ေနတဲ့ age value ကိရ


' လာမ.ာြဖစ်[ပီးေတာ့ person class က protected

property age ကိတ


' က
ိ' o
် ' ိ ကလ
် မ
. ်းေခXမယ်ဆရ
'ိ င်ေတာ့ error တတ်မာ. ြဖစ်ပါတယ်။

Not for sale 10


OOP Basic: Inheritance A Programmer Ó 2020

Inheritance

Inheritance အေ1ကာင်းကိ' ေနာက်မေ


. ြပာဖိ'လ'
့ ပ်ထားေပမယ့် ေနာက်လာမယ့် အပိင
' း် ေတွမာ. inheritan-

ce အေ1ကာင်းပါ သိမရ
. မ.ာေလးေတွ`ိလ
. ာေတာ့ Inheritance ကိ' ေစာေစာစီးစီးပဲ ေြပာြပထားပါမယ်။

Inheritance လ'ပ်တယ်ဆတ
'ိ ာ တစ်ြခားေတာ့ မဟ'တဘ
် း> ၊ ကျေနာ် အေပXမ.ာလည်း ေြပာခဲတ
့ ာေတာ့ `.ိပါ

တယ်။ ြမန်မာမ^ြပgရင် အေမွလက်ခတ


ံ ာေပါ၊့ လက်ေတွxဘဝနဲဆက်
့ စပ်[ပီး1ကည့မ
် ယ်ဆ'ိ သားသမီးက မိဘ

ဆီကေန အေမွလက်ခရ
ံ ယ>မယ်ဆ'ိ မိဘေတွပိင
' ဆ
် င
'ိ တ
် ဲ့ အိမ်၊ြခံ၊ကား အစ`.ိတာေတွကိ' ပိင
' ဆ
် င
'ိ ခ
် င
ွ ရ
့် မယ်။

OOP မ.ာလည်း ထိန


' ည်းလည်းေကာင်းပဲ၊ Child Class ကေန [ပီးေတာ့ Parent Class ကိ' အေမွလက်ခံ

(Inheritance) လ'ပ်လက
ိ' မ
် ယ်ဆရ
'ိ င် Parent Class မ.ာ`.ိေနတဲ့ properties ေတွ methods ေတွကိ' လ.မ်း

[ပီးေတာ့ ေခXယ>အသံး' ြပg]ိင


' မ
် ာ. ြဖစ်ပါတယ်။ အသစ်မတ
. ထ
် ားရမ.ာကေတာ့ inheritance လ'ပ်ေတာမ
့ ယ်

ဆိ' extends ဆိတ


' ဲ့ keyword ေလးကိ' သံး' ပါတယ်။

Not for sale 11


OOP Basic: Inheritance A Programmer Ó 2020

အထက်ပါ code နမ>နာေလးကိ1' ကည့မ


် ယ်ဆရ
'ိ င် Man ဆိတ
' ာက child class ြဖစ်[ပီးေတာ့ Person ဆိ'

တာကေတာ့ Parent Class ြဖစ်ပါတယ်။ Parent class မ.ာ name ဆိတ


' ဲ့ property နဲ getName
့ ဆိတ
' ဲ့

method `.ိပါတယ်။ Child class ြဖစ်တဲ့ Man ထဲမာ. ေတာ့ ဘာမ.မ`.ိပါဘ>း၊ ဒါေပမယ့် extends key-

word ေလးကိ' သံး' ထား[ပီး Person class ဆီကေန inheritance လ'ပ်ထားပါတယ်။ ဒါေ1ကာင ့် Person

ဆိတ
' ဲ့ Parent Class ထဲမာ. `.ိတဲ့ property ြဖစ်တဲ့ name နဲ method
့ ြဖစ်တဲ့ getName တိကိ
' ့ ' လ.မ်း[ပီး

ေတာ့ ေခXယ>အသံး' ြပg]ိင


' ြ် ခင်းြဖစ်ပါတယ်။

ေနာက်တစ်ခထ
' ပ်သထ
ိ ားဖိ'ေကာင်
့ းတာက ေခXယ>အသံး' ြပgoံ'ပဲသာမကပဲ Parent Class ထဲမာ. `.ိတဲ့ met-

hod ေတွကိ' child class က overwrite လ'ပ်လက


ိ' လ
် ရပါတယ်
ိ' ့ ၊ ကိယ
' လ
် သ
ိ' လိ' ထပ်[ပီးြပင်ဆင်လရ
ိ' ့

တယ်လိ' ဆိ
့ လ
' ခ
ိ' ျင်တာြဖစ်ပါတယ်။

Not for sale 12


OOP Basic: Inheritance A Programmer Ó 2020

အေပXက နမ>နာေလးကိထ
' ပ်1ကည့ရ
် မယ်ဆ'ိ ပံမ
' န
. ် parent class ထဲမာ. `.ိတဲ့ getName ဆိတ
' ဲ့ method

ဟာ အရင်အတိင
' း် ဆိ' Hlaing ဆိတ
' ာကိပ
' ဲ output ြပန်ေပးမ.ာြဖစ်ပါတယ်၊ ဒါေပမယ့် Man ဆိတ
' ဲ့ child

class ထဲမာ. getName ဆိတ


' ဲ့ method ကိ' overwrite လ'ပ်[ပီး Hlaing Tin Htun ဆိ[' ပီး return

ြပန်လက
ိ' တ
် အ
ဲ့ တွက် ထွကလ
် ာတဲ့ output သည်လည်း Hlaing သာမဟ'တေ
် တာဘ
့ ဲ Hlaing Tin Htun

ြဖစ်သာွ းပါလိမ်မ
့ ယ်။

တစ်ခ' သတိချပ်ရမ.ာက inheritance လ'ပ်လက


ိ' ြ် ခင်းသည် public နဲ protected
့ ြဖစ်တဲ့ properties &

methods ေတွကသ
ိ' ာ လ.မ်း[ပီးေတာ့ access လ'ပ်]င
ိ' မ
် ယ်ဆတ
'ိ ာ သတိချပ်ထားရပါမယ်။ ကျေနာ်အေပX

မ.ာ access modifiers အေ1ကာင်း`.ငး် ြပတ'နး် က protected ေတွကိ' ဘယ်လြိ' ပန်ေခX သံး' ]ိင
' တ
် ယ်ဆ'ိ

တာ`.ငး် ြပထား[ပီးသားြဖစ်တအ
ဲ့ တွကေ
် 1ကာင ့် ေနာက်တစ်ေခါက်ထပ်[ပီးေတာ့ ဒီမာ. မေရးြပေတာပ
့ ါဘ>း။

ြပန်1ကည့ရ
် လွယေ
် အာင် code sample ေတာ့ ြပန်ထည့ေ
် ပးထားပါမယ်။

Not for sale 13


OOP Basic: Inheritance A Programmer Ó 2020

Inheritance ကေတာ့ ဒီေလာက်ပါပဲ၊ တစ်ခေ


' လးပဲထည့ေ
် ြပာပါရေစ။ ကျေနာ်တအခ'
ိ' ့ ဆ'ိ Person class

ကိ' parent class အြဖစ်သေဘာထား[ပီး man class ကေနလ.မ်း[ပီး inheritance လ'ပ်ေနတယ်။ ဒါေပ

မယ့် Person class ကိဘ > မ. လာ[ပီး inherit မလ'ပ်ေစချင်ရင်ေရာ ? ဒီေနရာမ.ာ final ဆိတ
' ယ်သက ' ဲ့ key-

word ကိသ
' း'ံ ]ိင
' ပ
် ါတယ်။ final ဆိတ
' ဲ့ keyword ကိသ
' း'ံ လိက
' မ
် ယ်ဆ'ိ ေနာက်ထပ် ဘယ် class ကမ. Pers-

on class ကိ' လာ[ပီး inherit လ'ပ်လမရေတာ


ိ' ့ ပ
့ ါဘ>း၊ ဒီလမ
ိ' ျိgးေပါ။့

Class ကိ' inherit မလ'ပ်]င


ိ' ေ
် အာင် ထိနး် လိက
' တ
် ာကေတာ့ ဟ'တပ
် ါ[ပီ၊ အေပXမ.ာေြပာခဲတ
့ ဲ့ parent class

မ.ာ`.ိတဲ့ method ကိ' child class က overwrite မလ'ပ်]င


ိ' ေ
် အာင် ထိနး် ချင်တယ်ဆရ
'ိ င်ေရာ ? ဒါဆိရ
' င်

လည်း final keyword ကိ' အသံး' ြပg[ပီး ကာကွယ]


် င
ိ' ပ
် ါတယ်။

Not for sale 14


OOP Basic: Inheritance A Programmer Ó 2020

Parent class မ.ာ method ကိ' ေ1ကညာကတည်းက final ခံ[ပီးေ1ကညာခဲမ


့ ယ်ဆ'ိ child class ေတွက

overwriteလ'ပ်]င
ိ' မ
် ာ. မဟ'တေ
် တာဘ
့ e
ဲ rrorတတ်မာ. ြဖစ်ပါတယ်။ ဒီေလာက်ဆ'ိ Inheritanceကိ' သေဘာ

ေပါက်[ပီထင်ပါတယ်။ ေနာက်တစ်ခဆ
' က်သာွ း1ကတာေပါ။့

Not for sale 15


OOP Basic: Static Properties & Methods A Programmer Ó 2020

Static Properties & Methods

ပံမ
' န
. အ
် ေပXမ.ာ ကျေနာ်တိ' ေလ့
့ လာခဲတ
့ အ
ဲ့ ရာေတွအရ class ထဲမာ. `.ိတဲ့ properties ေတွ methods ေတွ

ကိ' လ.မ်းေခXသံး' ချင်[ပီဆ'ိ new ဆိတ


' ဲ့ keyword နဲ instantiate
့ လ'ပ်[ပီးမ.ေခXသံး' ြဖစ်ခ1ဲ့ ကပါတယ်။ static

properties ေတွ methods ေတွရဲ ထ>


့ းြခားတဲအ
့ ချက်ကေတာ့ အဲလ
့ မ
ိ' ျိgး class ကိ' instantiate လ'ပ်စရာ

မလိဘ
' ဲ တိက
' o
် ' ိ ကေ
် ခXယ>အသံး' ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။ ကျေနာ်တိ' property
့ အေ1ကာင်းအရင်ေလ့လာ1က

ပါမယ်၊ [ပီးမ. methods ေတွကဆ


ိ' က်1ကတာေပါ။့ နမ>နာ static property ေလးတစ်ခ' အရင်ဆး'ံ 1ကည့ရ

ေအာင်။

အေပXက နမ>နာ country class ထဲမာ. static property တစ်ခေ


' 1ကညာထားပါတယ်။ ထ>းထ>းြခားြခား

ဘာမ.လပ ' း> ။ static ဆိတ


' ်ေပးစရာမလိဘ ' ဲ့ keyword ေလးထည့[် ပီး ေ1ကညာေပးoံ'ပဲ၊ ြပန်လည်ေခXသံး'

လိတ
' အ
ဲ့ ချိနမ
် ာ. ေတာ့ country class ကိ' new ဆိ[' ပီး instantiate လ'ပ်စရာမလိေ
' တာဘ
့ ဲ classname,

double-colon, property_name (Country::$name) ဆိ[' ပီး တိက


' o
် ' ိက် ေခXယ>အသံး' ြပg]ိင
' သ
် ာွ းမ.ာ

Not for sale 16


OOP Basic: Static Properties & Methods A Programmer Ó 2020

ြဖစ်ပါတယ်။ ဒီေနရာမ.ာ အသစ်မတ


. ထ
် ားရမ.ာက static property ကိေ ့ ယ်ဆ'ိ double colon
' ခXေတာမ

(::) သံး' ရမယ်ဆတ


'ိ ာပါပဲ။

Static properties ေတွကိ' သ>ရဲ့ မ> 'ိ င် self ဆိတ


့ လ class ထဲမာ. ပဲ ြပန်ေခXသံး' ချင်[ပီဆရ ' ဲ့ keyword နဲ ့

double colon ေပါင်း[ပီးေတာ့ (self::) ြပန်လည်ေခXယ>အသံး' ြပg]ိင


' မ
် ာ. ြဖစ်[ပီးေတာ့ inherit လ'ပ်ထား

'ိ င်ေတာ့ self အစား parent ဆိတ


တဲ့ child class ကြပန်ေခXသံး' ချင်တယ်ဆရ ' ဲ့ keyword နဲ ေခXယ>
့ အသံး'

ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။

အရင်ဆး'ံ မ>လ class ထဲမာ. ပဲ static property ကိြ' ပန်ေခXသံး' 1ကည့ရ


် ေအာင်။

အရင်အတိင
' း် static property name `.ိမယ်၊ [ပီးေတာ့ ပံမ
' န
. ် getName ဆိတ
' ဲ့ method တစ်ခ`
' ိမ
. ယ်၊

့ ီ method ထဲမာ. class ထဲမာ. ေ1ကညာထားတဲ့ static property name ကိ' self ဆိတ
အဲဒ ' ဲ့ keyword နဲ ့

လ.မ်းေခXထားတာကိ' ြမင်ရမ.ာြဖစ်ပါတယ်။ ေအာက်မာ. ေတာ့ (client code) country ဆိတ


' ဲ့ class ကိ'

Not for sale 17


OOP Basic: Static Properties & Methods A Programmer Ó 2020

instantiate လ'ပ်ထားတယ်၊ ေခXသံး' မယ့် getName က static method မဟ'တတ


် အ
ဲ့ တွက် class ကိ'

instantiate လ'ပ်ဖိ' လိ
့ အ' ပ်တာြဖစ်ပါတယ်။

ေနာက်ထပ် scenario တစ်ခက


' ေတာ့ inherit လ'ပ်ထားတဲ့ child class ကေန parent class မ.ာ`.ိတဲ့

static property ကိ' လ.မ်းေခXမ.ာြဖစ်ပါတယ်။

သေဘာတရားက အေပXမ.ာ ကျေနာ်တိ' ့ ေလ့လာခဲတ


့ ဲ့ အရာနဲ ့ အတ>တပ
> ါပဲ၊ ကွာသွားတာကေတာ့ child

class က parent class မ.ာ`.ိေနတဲ့ static property ကိ' လ.မ်း access လ'ပ်ေတာမ
့ ယ်ဆ'ိ self ဆိတ
' ဲ့

keyword အစား parent ဆိတ


' ဲ့ keyword ကိ' သံး' ရမ.ာြဖစ်ပါတယ်၊ အေနာက်မာ. double colon (::)

လိက
' ရ
် မယ်ဆတ
'ိ ာလဲ သတိချပ်ထားရပါမယ်။

Not for sale 18


OOP Basic: Static Properties & Methods A Programmer Ó 2020

အေပXက ေြပာခဲတ
့ ဲ့ static property အလ'ပ်လပ
' ်ပံက
' န
ိ' ားလည်သာွ း[ပီဆ'ိ method အတွကလ
် ည်း အလိ'

အေလျာက်နားလည်သာွ းမ.ာပါ၊ ကွာြခားချက်မ`.ိပါဘ>း၊ အသံး' အ]^နး် က အတ>တပ


> ါပဲ။ method ကိေ
' ခX

ေတာမ
့ ယ်ဆ'ိ classname, double_colon, method_name လာမယ်။ ဒီအတွကဥ
် ပမာတစ်ခ' တစ်ခါ

တည်း1ကည့ရ
် ေအာင်။

အထ>းတစ်လည်`င
. း် ြပစရာမလိေ
' လာက်ေတာဘ
့ း> ထင်ပါတယ်၊ country class ထဲမာ. static method

တစ်ခေ
' 1ကညာထား[ပီးေတာ့ client code မ.ာ class name ကိ' double colon ခံ[ပီးေတာ့ method ကိ'

တိက
' o
် ' ိ ကေ
် ခXယ>အသံး' ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။

ိ' ဲ self နဲ ့ parent အသံး' ချပံက


Property ေတွလပ ' အတ>တပ
> ါပဲ၊ မ>လ class ထဲမာ. ပဲ method ကိြ' ပန်

လည်အသံး' ြပgချင်တယ်ဆ'ိ self ကိသ


' း'ံ [ပီးေတာ့ inherit လ'ပ်ထားတဲ့ child class ကေန အသံး' ြပgချင်

ရင်ေတာ့ parent ဆိတ


' ဲ့ keyword ကိအ
' သံး' ြပgရမ.ာြဖစ်ပါတယ်။

Not for sale 19


OOP Basic: Static Properties & Methods A Programmer Ó 2020

မBလ class ထဲမFာပဲ static method ကိြK ပန်လည်အသံးK ြပTပံK

Static property မ.ာသံး' ခဲတ


့ ာနဲ အတ>
့ တပ> ါပဲ၊ မ>လ class ထဲမာ. ပဲဆ'ိ self ဆိတ
' ဲ့ keyword ကိသ
' း'ံ [ပီးေတာ့

double colon ခံကာ method name ကိလ


' မ
. ်းေခX ]ိင ် ာ. ြဖစ်ပါတယ်။ (self::getName())
' မ

Not for sale 20


OOP Basic: Static Properties & Methods A Programmer Ó 2020

Inherit လKပ်ထားတဲ့ child class ကေန parent class ထဲမFာYFိေနတဲ့ method ကိြK ပန်လည်အသံးK ြပT

ပံK

သံး' တဲပ
့ ံစ > ါပဲ၊ self ေနရာမ.ာ parent အြဖစ် အစားထိး' ေြပာင်းလဲသာွ းတာကိပ
' ံ အတ>တပ ' ဲ ြမင်ရမ.ာ

ြဖစ်ပါတယ်။

Not for sale 21


OOP Basic: Interfaces A Programmer Ó 2020

PHP ကိအ
# သံး# ြပ*၍ လက်ေတွ1 project များကိ# ကိယ
# တ
် င
ိ# က
် ယ
ိ# က
် ျ ေရးသား8ိင
# ေ
် အာင်

A Programmer မ9 သင်:ကားေပးေနပါသည်။

:ကည့@
် A ရန် - https://bit.ly/3kWQlsf

Not for sale 22


OOP Basic: Interfaces A Programmer Ó 2020

Interfaces

Class ဆိတ
' ာကိ' ရင်း].းီ [ပီးသားဆိရ
' င် Interface ကိလ
' ဲ နားလည်ရလွယမ
် ာ. ပါ။ Interface ဆိတ
' ာ ဟာ

လည်း တစ်နည်းအားြဖင ့် class တစ်ခပ


' ါပဲ၊ Interface ဆိတ
' ဲ့ class ထဲမာ. ဘယ် methods ေတွ proper-

ties ေတွ`ိမ
. ယ်ဆတ
'ိ ာကိ' သတ်မတ
. ေ
် ပးရပါတယ်။

အဲလ
့ ိ' သတ်မတ
. လ
် က
ိ' ြ် ခင်းအားြဖင ့် type တ>တဲ့ class ေတွကိ' group လ'ပ်ေပး]ိင
' ပ
် ါတယ်။ ဥပမာနဲ ့

ြမင်ေအာင် ေြပာရရင် Myanmar , Japan အစ`.ိတဲ့ class ေတွသည် Country ဆိတ


' ဲ့ Interface ေအာက်

မ.ာ`.ိ[ပီးေတာ့ တ>ညတ
ီ ဲ့ methods & properties ေတွ`ိ.]င
ိ' ပ
် ါတယ်၊ Myanmar မ.ာလည်း populations

ဆိတ
' ဲ့ property `.ိ]င
ိ' သ
် လိ' Japan မ.ာလည်း populations ဆိတ
' ဲ့ property `.ိပါတယ်။ ].စခ
် လ
' းံ' က

]ိင
' င
် ေ
ံ တွြဖစ်တအ
ဲ့ တွက် ]ိင
' င
် တ
ံ စ်ခမ
' ာ. `.ိသငတ
့် ဲ့ properties & methods ေတွက တ>ည]
ီ င
ိ' တ
် အ
ဲ့ တွက်

(Type တ>တအ
ဲ့ တွက)် Country ဆိတ
' ဲ့ Interface တစ်ခေ
' အာက်ကေန implement လ'ပ်သာွ း]ိင
' မ
် ာ. ြဖစ်

ပါတယ်။ ေနာက်ထပ် ဥပမာ တစ်ခထ


' ပ်ေပးရရင် cat & dog class ေတွမာ. Animal ဆိတ
' ဲ့ interface

ထ'တလ
် ိ' ရတယ်
့ ဆတ'ိ သ
ဲ့ ေဘာေပါ၊့ Cat ေရာ dog ေရာ animal ေတွြဖစ်[ပီးေတာ့ လမ်းေလŠာက်]င
ိ' မ
် ယ်၊

အစာစား]ိင
' မ
် ယ်ဆတ
'ိ ဲ့ Animal တစ်ေကာင်ရဲ `.့ ိသငတ
့် ဲ့ methods & properties ေတွ`ိ.မာ. ြဖစ်[ပီး Class

Type ကလည်း တ>မာ. ြဖစ်ပါတယ်။ Interface တစ်ခေ


' ဆာက်1ကည့ရ
် ေအာင်။

Not for sale 23


OOP Basic: Interfaces A Programmer Ó 2020

အေပXမ.ာ ကျေနာ် interface တစ်ခေ


' ဆာက်ြပထားပါတယ်။ interface ေဆာက်တအ
ဲ့ ချိနမ
် ာ. သံး' ေပးရ

မယ့် keyword ကလဲ interface ပဲြဖစ်ပါတယ်။ အေနာက်မာ. ေတာ့ interface ရဲ နာမည်


့ လကိ' ပ
် ါတယ်။

လက်`ိမ
. ာ. ေတာ့ interface နာမည်ကိ' country လိေပးထား[ပီ
'့ းေတာ့ အထဲမာ. currentPopulation နဲ ့

isAsianCountry ဆိတ
' ဲ့ methods ].စခ
် က
' ိ' ေတွxရမ.ာြဖစ်ပါတယ်။ တစ်ခသ
' တိထားမိမာ. က အဲဒ
့ ]
ီ စ
. ခ
် လ
' းံ'

ကိ' ေ1ကညာပဲေ1ကညာထား[ပီးေတာ့ implement လ'ပ်ထားြခင်းမ`.ိပါဘ>း။ အဲလ


့ မ
ိ' ျိgး implementation

မ`.ိဘဲ declaration ဘဲ`ိတ


. ဲ့ methods ေတွကိ' abstract methods ေတွလေခXပါတယ်
ိ' ့ ။ Interface

ထဲမာ. abstract methods ေတွပဲ ေ1ကညာလိ' ရမယ်


့ ဆတ'ိ ာကိလ
' ည်း သတိထပ်ချပ်ထားသငပ
့် ါတယ်။

Implementation လ'ပ်ရမယ့် code ေတွက သ>ကိ


့ ' implements လ'ပ်မယ့် classေတွ (concrete class)

မ.ာပဲ`ိပ
. ါမယ်။ လက်`ိအ
. ေြခအေနမ.ာ Myanmar ဆိတ
' ဲ့ concrete class က Country ဆိတ
' ဲ့ interface

ကိ' implement လ'ပ်ထားတာကိေ x ပါမယ်။ implements ဆိတ


' တွရ ' ဲ့ keyword ေလးကိ' သံး' ပါတယ်။

ဒါေပမယ့လ
် က်`ိအ
. ေြခအေနမ.ာ Myanmar ဆိတ
' ဲ့ concrete class ထဲမာ. Country Interface ထဲက

ေ1ကညာထားတဲ့ abstract methods ေတွကိ' implement လ'ပ်ထားြခင်း မ`.ိေသးပါဘ>း။ ဒါေ1ကာင ့်

Not for sale 24


OOP Basic: Interfaces A Programmer Ó 2020

အခ'လက်`ိ. code ကိ' run လိက


' မ
် ယ်ဆ'ိ implement မလ'ပ်ရေသးဘ>းဆိတ
' ဲ့ error exception တတ်မာ.

ြဖစ်ပါတယ်။ ဒါေ1ကာင ့် Implementation လ'ပ်လက


ိ' ရ
် ေအာင်။

Myanmar ဆိတ
' ဲ့ concrete class ကိ' interface ထဲမာ. `.ိတဲ့ methods ေတွအတိင
' း် implementation

လ'ပ်ေပးလိက
' [် ပီြဖစ်ပါတယ်။

Not for sale 25


OOP Basic: Interfaces A Programmer Ó 2020

ေနာက်ထပ် country အသစ်တစ်ခ' (concrete class) ထပ်ထည့1် ကည့ရ


် ေအာင်။

Japan ဆိတ
' ဲ့ concrete class အသစ်တစ်ခထ
' ပ်ထည့ထ
် ား[ပီးေတာ့ ထံး' စံအတိင
' း် Country interface

ထဲမာ. `.ိတဲ့ methods ေတွကိ' implement လ'ပ်ေပးထားပါတယ်။ ေနာက်ထပ်လည်း လိအ


' ပ်သလိ'

country type တ>တဲ့ concrete class ေတွကိ' country interface ကိသ


' း'ံ [ပီးေတာ့ implementation

လ'ပ်လရ]ိ
ိ' ့ င
' သ
် ာွ းမ.ာပဲြဖစ်ပါတယ်။ ဒါဆိရ
' င် interface ရဲ အသံ
့ း' ဝင်ပံန
' ဲ ့ အသံး' ြပgပံက
' ိ' နားလည်သာွ းမယ်

ထင်ပါတယ်၊ သ>နအေြခခံ
ဲ့ သေဘာတရားြခင်းဆင်တဲ့ Abstract class ကိဆ
' က်[ပီးေတာေ
့ လ့လာ1က

ပါမယ်။

Not for sale 26


OOP Basic: Abstract Classes A Programmer Ó 2020

Abstract Classes

Abstract class ရဲ အေြခခံ


့ သေဘာတရားက Interface နဲ ့ အတ>တြ> ဖစ်ေပမယ့် ကွာြခားတဲအ
့ ချက်ေတွ

`.ိေနပါေသးတယ်။ အဓိက ကွာြခားတဲအ


့ ချက်က Interface မ.ာတ'နး် က implementation မ`.ိတဲ့

abstract methods ပဲ ထည့လ


် ရေပမယ့
ိ' ့ ် abstract class မ.ာေတာ့ implementation မ`.ိတဲ့ abstract

method ေရာ implementation လ'ပ်ထားလိရတဲ


' ့ ့ concrete method ေရာထည့သ
် း'ံ လိရ]ိ
'့ င' ပ
် ါတယ်။

ေနာက်ထပ်ကာွ ြခားချက်တဲ့ အချက်ေတွကေ


ိ' တာ့ ေနာက်တစ်ပိင
' း် မ.ာ ထပ်`င
. း် ြပေပးပါမယ်။

အရင်ဦးဆံး' ကျေနာ်တိ' ့ Interface မ.ာေရးခဲတ


့ ဲ့ Myanmar နဲ ့ Japan ဆိတ
' ဲ့ concrete class ေတွမာ.

တ>ညတ
ီ ဲ့ method တစ်ခ`
' ိေ
. နပါတယ်။ ဟ'တပ
် ါတယ်၊ isAsianCountry ဆိတ
' ဲ့ method ြဖစ်ပါတယ်၊

].စခ
် လ
' းံ' က Asian country ြဖစ်တအ
ဲ့ တွက် return “true” ြပန်ထားပါတယ်။ ဒီေနရာမ.ာ အဲဒ
့ ီ method

က concrete class ].စခ


် လ
' းံ' မ.ာထပ်ေနတဲအ
့ တွက် Interface မ.ာတစ်ခါတည်း ေရးထားလိရရင်
'့ code

duplication issue ကိ`


' င
. း် ]ိင
' သ
် ာွ းမ.ာြဖစ်ပါတယ်။ ဒါေပမယ့် Interface ထဲမာ. abstract method

ပဲ`ိခ
. င
ွ ရ
့် တဲအ
့ တွက် Interface အစား Abstract Class ကိေ
' ြပာင်းလဲ[ပီး ဒီလမ
ိ' ျိgးအသံး' ြပg]ိင
' ပ
် ါတယ်။

Not for sale 27


OOP Basic: Abstract Classes A Programmer Ó 2020

့ နရာမ.ာ abstract class ဆိတ


Abstract class ေ1ကညာတဲေ ' ဲ့ keywords ေလးေတွကိ' သံး' [ပီးေတာ့

ေ1ကညာပါမယ်။ ဒါဆိရ
' င် ေနာက်တစ်ဆငအ
့် ေနနဲ abstract
့ class ကိ' ဘယ်လြိ' ပန်ေခXသံး' ]ိင
' မ
် လဲ ဆိတ
' ာ

ကိဆ
' က်1ကည့1် ကရေအာင်။

Not for sale 28


OOP Basic: Abstract Classes A Programmer Ó 2020

Abstract class ကိြ' ပန်ေခXသံး' တဲ့ ေနရာမ.ာေတာ့ Interface ကိေ ' ျိgး implements ဆိတ
' ခXသံး' သလိမ ' ဲ့

keyword မဟ'တေ ့ ဲ extends ဆိတ


် တာဘ ' ဲ့ keyword နဲ ့ ေခXရမ.ာြဖစ်ပါတယ်။ ေနာက်တစ်ခထ
' း> ြခား

သွားတာက isAsianCountry ဆိတ


' ဲ့ method မ.ာ abstract class ထဲကေ
ိ' ရာက်သာွ း[ပီးေတာ့ Myanamr

& Japan ဆိတ


' ဲ့ concrete class ေတွထမ
ဲ ာ. code weight ေလျာခ
့ ျ]ိင
' သ
် ာွ းမ.ာြဖစ်ပါတယ်။ result က

ေတာတ
့ တ
> ပ
> ဲရေနဦးမ.ာပဲြဖစ်ပါတယ်။ လာမယ့အ
် ပိင
' း် မ.ာ Interface နဲ ့ Abstract class ရဲ ့အဓိကကွာ

ြခားချက်ေတွကေ
ိ' ရးသွားပါမယ်၊ Interface နဲ abstract
့ class ကိပ
' ါ ေနာက်တစ်lကိမ် real world code

example ေတွန ဲ မတ>


့ ညတီ ဲ့ o^ ေထာငက
့် ေန ထပ်[ပီး`.ငး် လင်းသွားပါမယ်။

Not for sale 29


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

Interface VS Abstract Class

အေပXကအပိင
' း် မ.ာတ'နး် ကေတာ့ Interface & Abstract class ကိအ
' ေြခခံo^ေထာငက
့် ေန ေရးသားထား

ပါတယ်။ အခ'တစ်ေခါက်ေတာ့ သ>တဘာေ1ကာင


ိ' ့ အ့် သံး' ဝင်လဆ
ဲ တ
'ိ ဲ့ o^ ေထာငအ
့် ေပX ပိဦ
' းစားေပး[ပီး `.ငး်

ြပေပးသွားပါမယ်။ Interface တစ်ခ' implement လ'ပ်ေတာမ


့ ယ်ဆ၊'ိ interface ဆိတ
' ဲ့ keyword သံး'

တယ်၊ Interface ထဲမာ. `.ိတဲ့ method ေတွက abstract method ေတွြဖစ်ရမယ်၊ method ေတွရဲ ့

declaration ပဲ`ိမ
. ယ်၊ implementation မ`.ိရဘ>း။ ေနာက်တစ်ချက်က method ေတွရဲ visibility
့ က

public ြဖစ်မယ်။ဘာေ1ကာင ့် interface ကအသံး' ဝင်ရတာလဲကိ' ေအာက်ကနမ>နာ code ေလးေတွ

1ကည့ရ
် ေအာင်။

Not for sale 30


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

usegmail နဲ usehotmail
့ ဆိ[' ပီး ကျေနာ်မ
့ ာ. service class ].စခ
် `
' ိပ
. ါတယ်၊ Client class တစ်ခ' `.ိပါမယ်။

Client class code ထဲမာ. construct ဆိတ


' ဲ့ function ကကျေနာ်တအတွ
ိ' ့ ကစ
် မ
ိ ်းေနေသးပါတယ်၊ ေနာက်

လာမယ့် အပိင
' း် ေတွမာ. `.ငး် ြပေပးသွားပါမယ်။ လက်`ိမ
. ာ. ေတာ့ Client Class ကိ' instantiate လ'ပ်မယ်

ဆိရ
' င် construct ထဲမာ. `.ိတဲ့ parameter အတွကပ
် ါ တစ်ခါတည်း ထည့ေ
် ပးဖိ' ့ လိတ
' ယ်လိ' ့ေလာေလာ

ဆယ် temporary အေနနဲမ.့ တထ


် ားလိက
' ပ
် ါမယ်။ ဒါဆိရ
' င် client code ကိ' ေခXသံး' မယ်ဆ'ိ ဒီလေ
ိ' လးသံး'

ရပါမယ်။

client ထဲက submit function ကိ' တစ်ခါတည်းလ.မ်းေခXလိက


' တ
် ယ်။ ဒါဆိရ
' င် sending using gmail

ဆိတ
' ဲ့ output ကျေနာ်တရပါတယ်
ိ' ့ ၊ ဟ'တ[် ပီ၊ ဒါဆိ' Gmail မဟ'တဘ
် ဲ Hotmail ကိသ
' း'ံ [ပီးပိချင်
' ့ တယ်

ဆိပ
' ါစိ၊' ့ ဒါဆိရ
' င် client class က constructor ထဲမာ. သွားေြပာင်းေပးဖိ'လိ
့ ပ' ါတယ်။ လက်`ိမ
. ာ. class က

တစ်ခတ
' ည်း `.ိေပမယ့် real world project ေတွမာ. class ေတွအများlကီး ထပ်`ိ.လာ]ိင
' ပ
် ါတယ်။ ဒါ

ေ1ကာင ့် တစ်ခခ
' ေ
' ြပာင်းချင်တင
ိ' း် မ.ာ constructor ကိတ
' က
ိ' o
် ' ိက် သွားထိ[ပီးြပင်ေနရပါမယ်။ ဒီလိ' swap-

ping issue ကိ' interface သံး' [ပီး ေြဖ`.ငး် 1ကည့ရ


် ေအာင်။

Not for sale 31


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

mailService ဆိတ
' ဲ့ interface တစ်ခေ
' ဆာက်[ပီး usegmail နဲ usehotmail
့ ဆိတ
' ဲ့ concrete class ေတွ

ကေန implement လ'ပ်ထားလိက


' မ
် ယ်။ [ပီးေတာ့ အေ`. xက scenario မ.ာကျေနာ်တကိ
ိ' ့ အ
' လ'ပ်o^ပ်ေစ]ိင
' ်

မယ့် client class ထဲမာ. usegmail usehotmail ဆိတ


' ဲ့ concrete class ေတွကိ' manual မထည့ေ
် တာ့

ဘဲ ဒီလမ
ိ' ျိgး interface ကိ' constructor ထဲမာ. တိက
' o
် ' ိ ကထ
် ည့ထ
် ားလိက
' ပ
် ါမယ်။

Not for sale 32


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

ဒီလမ
ိ' ျိgး interface ကိသ
' း'ံ [ပီး modify လ'ပ်[ပီးတဲေ
့ နာက်မာ. ကျေနာ်တအေနနဲ
ိ' ့ ့mail service ကိေ
' ြပာင်း

ချင်တအ
ဲ့ ချိနတ
် င
ိ' း် မ.ာ clientclass ကိ' instantiate လ'ပ်တေ
ဲ့ နရာမ.ာ ကိယ
' သ
် း'ံ ချင်တဲ့ concrete class ကိ'

ထည့ေ
် ပးလိက
' o
် ' ံပါပဲ၊ result ကတ>တပ
> ဲ၊ ဒါေပမယ့် constructor ကိ' manually သွားထိေနစရာမလိ'

ေတာပ
့ ါဘ>း။

Abstract class က Interface နဲ ့ မတ>တာက abstract မ.ာ concrete method ေတွပါေရးလိရတယ်


'့ ။

class ထဲမာ. define လ'ပ်ထားတဲ့ abstract method ေတွကိ' child class ေတွက မြဖစ်မေန imple-

ment လ'ပ်ေပးရမယ်။ Abstract class ရဲ main


့ purpose က child class ေတွအတွက် template ေလး

လိပ
' ံစ
' ပ
ံ ဲ၊ inherit လ'ပ်မယ်၊ abstract method ေတွ implement လ'ပ်မယ်။ abstract class ကဘယ်လိ'

အသံး' ဝင်လဆ
ဲ တ
'ိ ာ ေအာက်က code example ေလးေတွ1ကည့ရ
် ေအာင်။

Not for sale 33


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

chickenCurry ဆိတ
' ဲ့ 1ကက်သားဟင်းချက်တဲ့ class တစ်ခ`
' ိတ
. ယ်။ Normal class ေတွပဲေနာ်၊ အထဲမာ.

function 4 ခ'`ိမ
. ယ်။ chickenCurry လိမ
' ျိgးအလားတ> ေနာက်ထပ် class တစ်ခထ
' ပ်မံတည်ေဆာက်ပါ

မယ်။

Not for sale 34


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

ေနာက်တစ်ခ' ဝက်သားဟင်းချက်တဲ့ porkCurry ဆိတ


' ဲ့ class တစ်ခ`
' ိတ
. ယ်။ class ].စခ
် က
' ယ
ိ' •
. 1ကည့်

လိက
' မ
် ယ်ဆ'ိ addSalt ရယ် addPepper ရယ်ဆတ
'ိ ဲ့ တ>တဲ့ methods 2 ခ'ကေ
ိ' တွxရမယ်၊ အဓိကပါဝင်

ပစည်းြဖစ်တဲ့ addPork နဲ ့addChicken ပဲကာွ သွားမယ်။ ဒီလေ


ိ' နရာမ.ာ abstract class ကိသ
' း'ံ [ပီးေတာ့

addSalt & addPepper ကိ' implement လ'ပ်ထားမယ်၊ main ingredients ြဖစ်တဲ့ 1ကက်နဝက်
ဲ ့ ကိ'

abstract method လ'ပ်[ပီးေတာ့ concrete class ေတွကိ' implement လ'ပ်ခင


ိ' း် မယ်။ ဒါဆိရ
' င်ေအာက်

ကလိြ' ဖစ်သာွ းမယ်။

Not for sale 35


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

Recipe ဆိတ
' ဲ့ abstract class ေလးတစ်ခေ
' ဆာက်လက
ိ' တ
် ယ်။ အဲထ
့ မ
ဲ ာ. ထပ်ေန[ပီး ြပန်သး'ံ လိရတဲ
'့ ့

method ၃ခ'ကတ
ိ' စ်ခါတည်း implement လ'ပ်ထားလိက
' တ
် ယ်၊ ြပန်သး'ံ လိမရတဲ
'့ ့ method ကိေ
' တာ့

abstract method အြဖစ်ေရးထားတယ်။ ဒါဆိရ


' င် chickenCurry နဲ ့ porkCurry class ကိေ
' ဆာက်

ေတာမ
့ ယ်ဆ'ိ Recipe abstract class ကိ' extends လ'ပ်[ပီး ေဆာက်o' ံပဲ။ extends လ'ပ်လက
ိ' [် ပီဆ'ိ

abstract class မ.ာ`.ိတဲ့ concrete method ေတွကိ' access လ'ပ်ခင


ွ `
့် ိ မ
. ယ်။ abstract method ကိ'

လည်း ကိယ
' လ
် ခ
ိ' ျင်တဲ့ code ေတွ implement လ'ပ်[ပီးေရးလိက
' o
် ' ံပဲ။ ေအာက်ကလိေ
' ပါ။့

Not for sale 36


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

Porkcurry ကိလ
' ည်း အေပXက chickenCurry လိပ
' ဲ ထပ်မံအသံး' ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။

အရင်တန
' း် ကေရးခဲတ
့ ဲ့ class အကွ]
ဲ စ
. ခ
် အ
' တိင
' း် လိမ
' ျိgး result ကအတ>တပ
> ဲရတယ်။ ဒါဆိရ
' င် ဘယ်လိ'

အေြခအေနမျိgးမ.ာ abstract ကိသ


' း'ံ ရမယ်ဆတ
'ိ ာနားလည်မယ်လထင်
ိ' ့ ပါတယ်။

Interface နဲ ့ abstract class ကိေ


' တာ်ေတာ်ေလးလည်း`.ငး် [ပီးသွား[ပီဆေ
'ိ တာ့ အဓိကအားြဖငသ
့် တ
> ိ' ့

].စခ
် ဘ
' ာကွာသွားလဲဆတ
'ိ ာကိ' နိဂံး' ချgပ်ရရင်

Not for sale 37


OOP Basic: Interface VS Abstract Class A Programmer Ó 2020

• Interface မ.ာ child class ေတွက interface တစ်ခထ


' က်မက implements လ'ပ်လရတယ်
ိ' ့ ။

abstract မ.ာေတာ့ child က abstract class တစ်ခပ


' ဲ extends လ'ပ်လရမယ်
ိ' ့ ။

• Interface အတွကဆ
် 'ိ implements keyword သံး' တယ်။ abstract class အတွကဆ
် 'ိ extends

keyword သံး' တယ်။

• Interface မ.ာ data member ေတွန ဲ ့constructor ေတွပါခွငမ


့် `.ိဘး> ။ abstract class မ.ာေတာ့

data member ေရာ constructor ေရာပါလိရတယ်


'့ ။

• Interface မ.ာ implementation မ`.ိတဲ့ abstract method ေတွပဲပါခွင`


့် ိ မ
. ယ်။ abstract class

မ.ာေတာ့ abstract method ေရာ၊ concrete method ေရာပါခွင`


့် ိ မ
. ယ်။

• Interface မ.ာ default အေနနဲ ့ public ကလွလ


ဲ ိ' ့ကျန်တဲ့ access modifiers ေတွပါခွငမ
့် `.ိဘး> ။

abstractမ.ာေတာ့ methods ေတွ properties ေတွမာ. access modifiers ေတွထည့လ


် ရတယ်
ိ' ့ ။

• Interface မ.ာ ပါတဲ့ member ေတွက static type ြဖစ်ဖွငမ


့် `.ိဘး> ။ abstract မ.ာေတာ့ concrete

ြဖစ်ထားတဲ့ member ေတွက static type ြဖစ်လရတယ်


ိ' ့ ။

Not for sale 38


OOP Basic: Traits A Programmer Ó 2020

Traits

Trait အေ1ကာင်းကိန
' ားလည်ဖိ'အတွ
့ က် Inheritance ရဲ ့ အစိတအ
် ပိင
' း် ေလးတစ်ခက
' ိ' ြပန်ေ]ွးဖိ'လိ
့ ပ' ါ

တယ်။ Inheritance မ.ာ child class ေတွက parent class ဆီကေန inheritance (အေမွလက်ခ)ံ ယ>လိ' ့

ရပါတယ်။ ဒါေပမယ့် ’ခင်းချက်တစ်ခ`


' ိတ
. ာက child class ေတွက တစ်ခထ
' က်ပိတ
' ဲ့ parent class ေတွ

ကိ' inheritance လ'ပ်လမရပါဘ>


ိ' ့ း၊ inheritance လ'ပ်လရမယ့
ိ' ့ ် parent class ကိ' တစ်ခပ
' ဲ ခင
ွ ြ့် ပgထားပါ

တယ်။ ဒါေ1ကာင ့် ဒီေနရာမ.ာ trait ဆိတ


' ာကိ' အသံး' ြပgလိ' ရ]ိ
့ င ' ပ
် ါတယ်။

တစ်ခထ
' က်ပိတ
' ဲ့ class ေတွကိ' inherit လ'ပ်ချင်[ပီဆ'ိ ပံမ
' န
. ် inheritance မလ'ပ်ဘဲ trait ကိ' အသံး' ြပg

[ပီးေတာ့ class ေတွအများlကီးကိ' တစ်[ပိgင်တည်း inherit လ'ပ်]င


ိ' မ
် ာ. ြဖစ်ပါတယ်။ Trait ထဲမာ. ပံမ
' န
. ်

class တစ်ခလ
' ပ
ိ' ဲ methods & properties ေတွကိ' လိသ
' လိေ
' 1ကညာလိရ]ိ
'့ င' တ
် အ
ဲ့ ြပင် visibility ကိ'

လည်း သတ်မတ
. ]
် င
ိ' မ
် ာ. ြဖစ်ပါတယ်။ ကျေနာ်တိ' trait
့ တစ်ခ' စ[ပီးေတာ့ ေဆာက်1ကည့ရ
် ေအာင်။

Not for sale 39


OOP Basic: Traits A Programmer Ó 2020

့ ယ်ဆ'ိ trait ဆိတ


Trait ေဆာက်ေတာမ ' ဲ့ keyword ေလးကိသ
' း'ံ [ပီးေတာ့ ေဆာက်ပါတယ်။ Client class

မ.ာကေတာ့ inherit လ'ပ်ချင်တဲ့ trait ကိ' use ဆိတ


' ဲ့ keyword ေလးသံး' [ပီးေတာ့ ြပန်ေခX သံး' ရပါမယ်။

အေပXက example ကိ1' ကည့မ


် ယ်ဆ'ိ oိ'းoိ'း`.ငး် `.ငး် ပဲ trait တစ်ခ' ေဆာက်ထား[ပီးေတာ့ client class မ.ာ

အဲဒ
့ ီ trait ကိ' ယ>သး'ံ ထားပါတယ်။

ေနာက်ဆး'ံ အေနနဲကေတာ
့ ့ client code က သံး' ချင်တာကိ' Client class ကိ' instantiate လ'ပ်[ပီးသံး'

oံ'ပါပဲ၊ဒါေတွကေတာသ
့ [ိ ပီးသားြဖစ်တအ
ဲ့ တွကက
် ျေနာ်အထ>းတစ်လည်မ`.ငး် ြပေတာပ
့ ါဘ>း။ ေနာက်တစ်

ဆငအ
့် ေနနဲ တစ်
့ ခထ' က်ပိတ
' ဲ့ trait ေတွေဆာက်1ကည့[် ပီး ေခXသံး' 1ကည့ပ
် ါမယ်။

Not for sale 40


OOP Basic: Traits A Programmer Ó 2020

အရမ်းlကီးေြပာင်းလဲသာွ းတာမ`.ိတာကိ' ေတွxရပါလိမ်မ


့ ယ်။ ထပ်ထည့ခ
် ျင်တဲ့ trait ကိေ
' 1ကညာတယ်၊

[ပီးေတာ့ class ထဲမာ. use နဲြပန်


့ ေခXသံး' ထားမယ်ဆရ
'ိ င် client code ကေန trait ထဲမာ. `.ိတဲ့ methods

ေတွကိ' access လ'ပ်ခင


ွ ရ
့် သွားမ.ာြဖစ်ပါတယ်။

Trait ရဲသေဘာတရားက
့ လွယက
် o
> ' ိး`.ငး် တဲအ
့ ြပင် အသံး' ဝင်တအ
ဲ့ တွက် အေရးlကီးပါတယ်။ PHP Fra-

mework တစ်ခြ' ဖစ်တဲ့ Laravel လိမ


' ျိgးမ.ာဆိရ
' င်လည်း trait ေတွ အေြမာက်အြမား သံး' ထားတာကိေ
' တွx

ရမ.ာြဖစ်ပါတယ်။

Not for sale 41


OOP Basic: Magic Methods in PHP A Programmer Ó 2020

Laravel Framework ကိ# အတွငး် ကျကျ အေြခခံကေန advance concepts ေတွအထိ

A Programmer ရဲ online
့ class မ9တစ်ဆငေ
့် လ့လာ8ိင
# ပ
် ါတယ်။

:ကည့@
် A ရန် - https://bit.ly/3293gjG

Not for sale 42


OOP Basic: Magic Methods in PHP A Programmer Ó 2020

Magic Methods In PHP

ဒီတစ်ပိင
' း် မ.ာေတာ့ PHP မ.ာ`.ိတဲ့ magic methods ေတွအေ1ကာင်းေရးသွားမ.ာြဖစ်ပါတယ်။ OOP

အေြခခံအတွကေ
် ရးေနတာြဖစ်ေပမယ့် PHP နဲေရးေနတာဆိ
့ ေ
' တာ့ magic methods ေလးေတွ

အေ1ကာင်းပါ တစ်ပါတည်းသိရေအာင် ထည့ေ


် ပးထားြခင်းြဖစ်ပါတယ်။ တစ်ြခား programming

အသံး' ြပgေနသ>ေတွအတွက် ဒီတစ်ပိင


' း် ေကျာ်ဖတ်သာွ းလိရပါတယ်
'့ ။

Magic Methods ေတွဆတ


'ိ ာ PHP က build-in support လ'ပ်ေပးထားတဲ့ special functions ေလး

ေတွြဖစ်ပါတယ်၊ အေခXအေဝXအရဆိရ
' င်ေတာ့ magic methods ေတွြဖစ်ပါတယ်။ magic methods

ေတွတင
ိ' း် ရဲ အေ`.
့ x မ.ာ __(double underscore) ပါ[ပီးေတာ့ အဲဒ
့ ီ magic methods ေတွဟာ သတ်မတ
. ်

ထားတဲ့ PHP events တိင


' း် မ.ာ လာ[ပီး execute လ'ပ်ြခင်းခံရပါတယ်။ အေပXက code examples ေတွ

ထဲမာ. ကျေနာ်တတစ်
ိ' ့ ခက
' ိ' သိ[ပီးခဲပ
့ ါ[ပီ။ (__construct) ဆိတ
' ဲ့ PHP magic method ေလးပါ။ အေ`. x မ.ာ

double underscore ခံထားတယ်၊ သ>ကိ


့ ' trigger ြဖစ်မယ့အ
် ချိနက
် class ကိ' instantiate လ'ပ်မယ့်

အချိနြ် ဖစ်ပါတယ်။ ဥပမာေလးတစ်ခတ


' န်း1ကည့ရ
် ေအာင်။

__construct

Not for sale 43


OOP Basic: Magic Methods in PHP A Programmer Ó 2020

Person ဆိတ
' cဲ့ lass ေလးထဲမာ. magic method တစ်ခြ' ဖစ်တဲ့ construct ကိတ
' ည်ေဆာက်ထား[ပီး

ေတာ့ property တစ်ခ' assign လ'ပ်ေပးထားပါတယ်။ client code မ.ာ person class ကိ' instantiate

လ'ပ်လက
ိ' တ
် ာနဲ ့ construct magic method ကိ' trigger ြဖစ်ထားတဲအ
့ တွက် construct method

ထဲမာ. ေ1ကညာထားတဲ့ name property ကိလ


' ည်း အလိအ
' ေလျာက် access လ'ပ်]င
ိ' မ
် ာ. ပဲြဖစ်ပါတယ်။

ဒါကေတာ့ magic method တစ်ခက


' ိ' အြမည်းေက•းထားoံ'ပဲ`ိပ
. ါေသးတယ်။ တစ်ကယ်ေတာ့ PHP

မ.ာတစ်ြခားေသာ magic methods ေတွအများlကီး`.ိပါေသးတယ်။ ကျေနာ် ဒီ series ေလးမ.ာေတာ့

အက'နလ
် းံ' ကိ' မေဖာ်ြပ]ိင
' တ
် အ
ဲ့ တွက် အသံး' များတဲ့ magic methods တစ်ချိg xပဲေရးြပသွားပါမယ်။

မ.တထ
် ားရမ.ာက PHP magic methods ေတွက ဘယ်လသ
ိ' တ်မတ
. ထ
် ားတယ်၊ ဘယ်အချိနေ
် တွမာ.

trigger ြဖစ်တယ်ဆတ
'ိ ဲ့ သေဘာတရားပဲြဖစ်ပါတယ်။ trigger လ'ပ်မယ့အ
် ချိနေ
် တွက documentation

ဖတ်လက
ိ' ရ
် င် နားလည်]င
ိ' တ
် အ
ဲ့ တွက် သေဘာတရားကိသ
' ာ မ.တထ
် ား]ိင
' ရ
် င် အဆင်ေြပပါတယ်။

__destruct

Destruct ကေတာ့ __construct နဲ ေြပာင်


့ းြပန်သေဘာတရားလိမ.
' ့ တလ
် ရပါတယ်
ိ' ့ ။ construct က class

ကိ' instantiate လ'ပ်တအ


ဲ့ ချိန ် trigger ြဖစ်ေပမယ့် destruct ကေတာ့ class ကိ' destroy/close

ြဖစ်တအ
ဲ့ ချိနမ
် ာ. trigger ြဖစ်ပါတယ်။ ဘယ်လအ
ိ' ချိနေ
် တွမာ. အသံး' ဝင်လဆ
ဲ ေ
'ိ တာ့ ကိယ
' ့် class ထဲမာ.

class ကိမ
' ပိတသ
် ာွ းခင်မာ. shutdown လ'ပ်စရာ`.ိတဲ့ task ေတွကိ' ေရးတဲေ
့ နရာမ.ာ အသံး' ဝင်ပါတယ်။

ဥပမာ

Not for sale 44


OOP Basic: Magic Methods in PHP A Programmer Ó 2020

Sample class ထဲက construct ထဲမာ. fopen operation လ'ပ်ထားခဲ[့ ပီးေတာ့ class ကိ' terminate

ြဖစ်မယ့အ
် ချိနမ
် ာ. trigger ြဖစ်မယ့် destruct magic method ထဲမာ. close လ'ပ်တဲ့ operation ကိ'

ေရးထားခဲလ
့ ရပါတယ်
ိ' ့ ။ ထိန
' ည်းလည်းေကာင်းပဲ၊ တစ်ြခားေသာ ပံစ
' တ
ံ > operations ေတွကလ
ိ' ည်း

destruct ထဲမာ. ဝင်ေရးထားလိရပါတယ်


'့ ။

__set

Set magic method ကေတာ့ define လ'ပ်ထားြခင်းမ`.ိတဲ့ property ေတွ၊ access လ'ပ်လမရ]ိ
ိ' ့ င
' တ
် ဲ့

(protected or private)ြဖစ်ေနတဲ့ property ေတွကိ' value assign လ'ပ်ေပးချင်တအ


ဲ့ ချိနမ
် ာ. အသံး' ြပg

]ိင
' ပ
် ါတယ်။ code sample ကိ1' ကည့ရ
် င် ပိြ' မင်သာွ းပါမယ်။

Not for sale 45


OOP Basic: Magic Methods in PHP A Programmer Ó 2020

ပံမ
' န
. ဆ
် 'ိ person class ထဲမာ. name ဆိတ
' ဲ့ property ကမ`.ိေပမယ့လ
် ည်း လိသ
' လိ' value ကိ' assign

လ'ပ်ေပး]ိင
' မ
် ာ. ြဖစ်ပါတယ်။ ဒီေနရာမ.ာ name property က protected တိ' ့ private တိြဖစ်
' ့ ေနမယ်

ဆိရ
' င်လည်း ပံမ
' န
. ဆ
် 'ိ inaccessible ြဖစ်တဲ့ property ကိလ
' မ
. ်းေခXမယ်ဆရ
'ိ င် error တတ်]င
ိ' ေ
် ပမယ့် set

magic method ကိသ


' း'ံ ထားမယ်ဆရ
'ိ င် အလ'ပ်လပ
' ်]င
ိ' မ
် ာ. ြဖစ်ပါတယ်။

__get

Set မ.ာတ'နး် ကေတာ့ inaccessible or undefined property ေတွကိ' value assign လ'ပ်တေ
ဲ့ နရာမ.ာ

သံး' ခဲပ
့ ါတယ်။ get မ.ာေတာ့ ေြပာင်းြပန်သေဘာတရားြဖစ်[ပီးေတာ့ inaccessible or undefined ြဖစ်

တဲ့ property value ေတွကိ' access လ'ပ်တေ


ဲ့ နရာမ.ာသံး' ပါတယ်။ ခ'နက set လ'ပ်ထားတဲ့ example

ေလးကိပ
' ဲ get magic method ထည့[် ပီး example 1ကည့1် ကည့ရ
် ေအာင်။

Not for sale 46


OOP Basic: Magic Methods in PHP A Programmer Ó 2020

Undefined property ြဖစ်တဲ့ name ကိ' access လ'ပ်လက


ိ' တ
် ာနဲ ့ get magic method ကိ' trigger

ြဖစ်သာွ း[ပီး return လ'ပ်ေပးသွားမ.ာပဲြဖစ်ပါတယ်။

__toString

Object တစ်ခက
' ိ' string လိ' display လ'ပ်ချင်တအ
ဲ့ ချိနမ
် ာ. toString ဆိတ
' ဲ့ magic method ကိ'

အသံး' ြပgပါတယ်။ ပံမ


' န
. ဆ
် 'ိ object ကိ' ဒီလိ' string အတိင
' း် ထ'တမ
် ယ်ဆ'ိ error တတ်မာ. ြဖစ်ပါတယ်။

Not for sale 47


OOP Basic: Magic Methods in PHP A Programmer Ó 2020

Person class ကိ' instantiate လ'ပ်ထားတဲ့ person object ကိ' string လိမ
' ျိgး echo နဲ display
့ လ'ပ်မယ်

ဆိ' error တတ်မာ. ြဖစ်ပါတယ်။ ဒီအချိနမ


် ာ. toString magic method ထည့သ
် း'ံ [ပီး object ကိ' string

လိမ
' ျိgးအသံး' ြပg]ိင
' မ
် ာ. ြဖစ်ပါတယ်။ for example

toString magic method ကိေ


' 1ကညာ[ပီး အထဲမာ. ကိယ
' သ
် လိ' operations ေတွကိ' handle လ'ပ်ထား

[ပီး return ြပန်ထား]ိင


' ပ
် ါတယ်။ ဒါဆိရ
' င် Person class ကိ' instantiate လ'ပ်ထားတဲ့ ဘယ် object မဆိ'

string output ထ'တမ


် ယ်ဆ'ိ toString ထဲက output ကိ' ရ`.ိမာ. ြဖစ်ပါတယ်။

ကျေနာ် magic methods အပိင


' း် ကိေ
' တာ့ ဒီမာ. ပဲ အဆံး' သတ်ပါရေစ၊ အခ'ကျေနာ်ေြပာြပခဲတ
့ ာေတွက

အသံး' များတဲ့ magic methods ေတွြဖစ်ပါတယ်။ တစ်ြခားေသာ real world မ.ာအသံး' ဝင်တဲ့ magic

methods ေတွလည်း`.ိပါေသးတယ်။ PHP Official Documentation မ.ာ ထပ်မံဝင်ေရာက်ဖတ်o^]င


ိ' ပ
် ါ

တယ်။

https://www.php.net/manual/en/language.oop5.magic.php

အဓိကရည်ရွယခ
် ျက်ကေတာ့ ဘယ်အချိနမ
် ာ. ဘယ်လိ' magic methods ေတွကအသံး' ဝင်]င
ိ' တ
် ယ်ဆ'ိ

တာကိန
' ားလည်[ပီးေတာ့ အသံး' ချ]ိင
' ဖ
် ိ'ပဲ့ ြဖစ်ပါတယ်။

Not for sale 48


OOP Basic: Polymorphism A Programmer Ó 2020

Polymorphism

Polymorphism ဆိတ
' ာစကားလံး' အေခXအေဝXအရသာo^ ပ်သေယာင်`ိေ
. ပမယ့် တစ်ကယ်တမ်းေတာ့ အဲ့

ေလာက်မo^ ပ်ပါဘ>း။ သ>ရဲ့ အဓိ


့ က ရည်ရွယခ
် ျက်သည် client code က interaction ေပXမ>တည်[ပီး ada-

ptable (အဆင်ေြပေအာင်လပ
' ်ေဆာင်]င
ိ' စ
် မ
ွ ်း) ြဖစ်ေအာင် လ'ပ်ေဆာင်ေပးပါတယ်။ ကျေနာ်တိ' ့ အေပX

မ.ာသင်ခတ
ဲ့ ဲ့ inheritance အေပXမ>တည်[ပီး polymorphism example တစ်ခ' တစ်ခါတည်း 1ကည့1် က

ရေအာင်။

ကျေနာ်ပထမဦးဆံး' Country ဆိတ


' ဲ့ interface တစ်ခေ
' ဆာက်ထား[ပီးေတာ့ အထဲမာ. talk ဆိတ
' ဲ့ meth-

od ေ1ကညာထားပါတယ်။ Myanmar နဲ Japan


့ ဆိတ
' ဲ့ concrete class ].စခ
် က
' interface ကိ' ပဲ share

သံး' [ပီး implements လ'ပ်ထား1ကပါတယ်။ ထိန


' ည်းလည်းေကာင်းပဲ talk ဆိတ
' ဲ့ method ကိလ
' ည်း

Not for sale 49


OOP Basic: Polymorphism A Programmer Ó 2020

implements လ'ပ်ထားပါတယ်။ Myanmar ေရာ Japan ေရာက ]ိင


' င
် ေ
ံ တွြဖစ်တဲ့ အားေလŠာ်စာွ အမျိgး

အစားတ>တအ
ဲ့ တွက် country interface ကိ' share သံး' ထားေပမယ့် အထဲမာ. ပါတဲ့ talk ဆိတ
' ဲ့ function

ကေတာ့ ]ိင
' င
် က
ံ လ
ိ' က
ိ' [် ပီး ကွြဲ ပား]ိင
' ပ
် ါတယ်။

Myanmar object ကေန output ထွကလ


် ာမယ့် talk function ].င ့် Japan object က ထွကလ
် ာမယ့်

talk functionဟာကွြဲ ပားသွားမ.ာပဲြဖစ်ပါတယ်။ ဒီလမ


ိ' ျိgး scenario ကိ' polymorphism လိေခXပါတယ်
'့ ။

Interface တစ်ခက
' ိ' အမျိgးအစားတ>လိ' ့share သံး' ေပမယ့် ပါဝင်တဲ့ functions ေတွက မတ>ကြွဲ ပားတာ

ကိ' ဆိလ
' ြိ' ခင်းြဖစ်ပါတယ်။ အခ'ေတွx ခဲရ
့ တာကိ' Dynamic Polymorphism လိေခX
'့ [ပီးေတာ့ ေနာက်

ထပ် static polymorphism ဆိတ


' ာလည်း `.ိပါေသးတယ်။

Static polymorphism ကိေ


' တာ့ inheritance အက>အညီမလိဘ
' ဲ function overloading လ'ပ်ြခင်း

ြဖငတ
့် ည်ေဆာက်]င
ိ' ပ
် ါတယ်။

Not for sale 50


OOP Basic: Polymorphism A Programmer Ó 2020

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ပါတယ်
'့ ။

Magic method __call reference

https://www.php.net/manual/en/language.oop5.overloading.php#object.call

Not for sale 51


OOP Basic: Dependency Injection A Programmer Ó 2020

Dependency Injection in PHP

Dependency Injection ကိ' wiki ကေတာ့ ဒီလေ


ိ' ြပာထားပါတယ်။

Dependency injection is a technique in which an object receives other objects that

it depends on.

Dependency injection (DI) ဆိတ


' ာ object တစ်ခက
' သ>လအ
ိ' ပ်တဲ့ တစ်ြခား object dependency

တစ်ခက
' ိ' လက်ခထ
ံ ားတာကိ' DI လိေခXပါတယ်
'့ တဲ့ (I know it’s a crazy translation :3) ။ ေြပလည်

ေအာင်ဘာသာြပန်ရရင် object တစ်ခက


' လိအ
' ပ်ေနတဲ့ dependency ကိ' တစ်ြခား object က supply

လ'ပ်ေပးမယ်၊ ဒါကိ' dependency injection လိေခXပါတယ်


'့ ။

`.ငး် ေအာင်ထပ်ေြပာရရင် ပင်မ original class က သ>လအ


ိ' ပ်တဲ့ dependency object ေတွကိ' ကိယ
' ်

တိင
' ် create မလ'ပ်ဘဲ တစ်ြခား resources တစ်ခဆ
' က
ီ ေန တိက
' o
် ' ိ ကယ
် သ
> း'ံ တာမျိgးကိ' ဆိလ
' ြိ' ခင်း ြဖစ်

ပါတယ်။ ြမင်သာသွားေအာင် code examples ေတွန ဲ ချည်


့ းကပ်1ကည့ရ
် ေအာင်။ ကျေနာ်တိ' dinner
့ စား

ေတာမ
့ ယ်ဆပ
'ိ ါစိ၊' ့ Dinner ဆိတ
' ဲ့ class `.ိမယ်၊ စားတာကဟ'တ[် ပီ၊ ဘာစားမ.ာလဲေပါ။့ ဒါဆိရ
' င် food ဆိ'

တဲ့ အစားအေသာက် dependency တစ်ခထ


' ပ်လလ
ိ' ာပါ[ပီ။ code နဲချေရး1ကည့
့ ရ
် ေအာင်။

Not for sale 52


OOP Basic: Dependency Injection A Programmer Ó 2020

Food ဆိတ
' ဲ့ class စေဆာက်လက
ိ' ပ
် ါ[ပီ။ Food ကေတာ့ Dinner ဆိတ
' ဲ့ class ကလိအ
' ပ်တဲ့ food ကိ'

supply လ'ပ်ေပးမယ့် class ပဲြဖစ်ပါတယ်။ အထဲမာ. construct တစ်ခပ


' ါတယ်၊ get ဆိတ
' ဲ့ method ပါ

မယ်၊ get ကိေ


' ခXမယ်ဆ'ိ Class ကိ' instantiate လ'ပ်တန
' း် က ထည့လ
် က
ိ' တ
် ဲ့ အစားအေသာက်ကိ' return

ြပန်လပ
' ်ေပးမ.ာြဖစ်ပါတယ်။ ဒါဆိ' ေနာက်ထပ် dinner class ကိ' ေဆာက်ရေအာင်။

Not for sale 53


OOP Basic: Dependency Injection A Programmer Ó 2020

ေလာေလာဆယ်မာ. ေတာ့ ဘာ dependency injection မ.မလ'ပ်ထားေသးပါဘ>း၊ ပံမ


' န
. အ
် တိင
' း် ပဲေရး

ထားပါေသးတယ်။ Dinner ဆိတ


' ဲ့ class ထဲမာ. eat ဆိတ
' ဲ့ method `.ိမယ်၊ အထဲမာ. Food class ကိ'

instantiate လ'ပ်ထားပါတယ်။ parameter ေနရာမ.ာလည်း hardcode ထည့ေ


် ပးထားပါတယ်။ ဒီေနရာ

မ.ာဘာေတွ မေကာင်းဘ>းလဲဆေ
'ိ တာ့ Dinner class ထဲမာ. တင် Food class ကိ' new နဲ instantiate
့ လ'ပ်

ထားတဲအ
့ တွက် Tight coupling ြဖစ်ေနပါတယ်၊ ဆိလ
' ခ
ိ' ျင်တာက food class ကိအ
' ေသချိတထ
် ား

သလိြ' ဖစ်ေနတယ်။ ေနာက်တစ်ခက


' parameter ေနရာမ.ာလည်း class ထဲမာ. တင် hardcode အေသ

ထည့ေ
် ပးထားရပါတယ်။ ဒီလိ' issues ေတွကိ' dependency injection ကိ' အသံး' ြပg[ပီးေတာေ
့ ြဖ`.ငး်

]ိင
' ပ
် ါတယ်။ DI သံး' [ပီးေတာ့ Dinner class ကိ' ြပန်ြပင်ေရး1ကည့ပ
် ါမယ်။

Dinner class ထဲမာ. food class ကိ' hardcode လ'ပ်ထားတာေတွဖယ်ထတ


' လ
် က
ိ' [် ပီး construct တစ်ခ'

ေဆာက်လက
ိ' ပ
် ါတယ်၊ parameter ထဲမာ. ေတာ့ food object ကိလ
' က်ခဖ
ံ ိ' ထည့
့ ေ
် ပးထားပါတယ်။

Not for sale 54


OOP Basic: Dependency Injection A Programmer Ó 2020

ဒါဆိရ
' င် client code ကေန[ပီးေတာ့ လိအ
' ပ်တဲ့ food class ကိ' instantiate လ'ပ်[ပီးေတာ့ dinner class

ထဲကိ' pass လ'ပ်ေပးလိက


' o
် ' ံပါပဲ။ ဒီအတွကေ
် 1ကာင ့် Dinner class က food class ကိ' သ>ကယ
ိ' တ
် င
ိ' ်

createလ'ပ်စရာမလိေ
' တာတ
့ အ
ဲ့ တွက် tight couplingမြဖစ်ေတာတ
့ အ
ဲ့ ြပင် hardcode-declaring ေတွ

ကိပ
' ါ reduce လ'ပ်]င
ိ' သ
် ာွ း[ပီပဲြဖစ်ပါတယ်။ အစမ.ာေြပာခဲတ
့ ဲ့ definition ကိြ' ပန်ေကာက်ရရင် dinner

class ကသ>လအ
ိ' ပ်တဲ့ food dependency class ကိက
' ယ
ိ' တ
် င
ိ' ် create လ'ပ်ြခင်းမ`.ိဘတ
ဲ စ်ြခားေသာ

object က create လ'ပ်ေပးထားတာကိ' တိက


' o
် ' ိ ကယ
် သ
> း'ံ လိက
' ြ် ခင်းြဖစ်ပါတယ်။ ဒါကိ' dependency

inject လ'ပ်လက
ိ' တ
် ယ်လဆိ
ိ' ့ လ
' ြိ' ခင်းြဖစ်ပါတယ်။

အခ'လက်`ိေ
. ရးလိက
' တ
် ဲ့ example မ.ာေတာ့ dependency injection ကိ' constructor ကေန တစ်ဆင ့်

လ'ပ်လက
ိ' ေ
် ပမယ့် constructor တင်မဟ'တဘ
် ဲ တစ်ြခားေသာ setter methods ေတွ interface ေတွမ.

တစ်ဆငလ
့် ည်း လ'ပ်ေဆာင်]င
ိ' ပ
် ါတယ်။

Not for sale 55


OOP Basic: Dependency Injection A Programmer Ó 2020

Conclusion

OOP Basic Series ေလးကိ' ဒီမာ. ပဲအဆံး' သတ်ထားလိက


' ပ
် ါတယ်ခင်ဗျာ။ ကျေနာ်ကယ
ိ' တ
် င
ိ' လ
် ည်းေလ့

လာဆဲ လ>တစ်ေယာက်ြဖစ်တအ
ဲ့ တွက် လိအ
' ပ်တာေလးေတွေတွxရင်လည်း ဝင်ေရာက်ြဖည့စ
် ကွ ေ
် ပး]ိင
' ်

ပါတယ်။ series ေလးကအများlကီးမဟ'တေ


် ပမယ့် OOP ကိစ
' ေလ့လာမယ့သ
် ေ> တွအတွကအ
် ကျိgး`.ိ

မယ်လိ' ေမŠာ်
့ လငပ
့် ါတယ်။

ေကျးဇ>းတင်ပါတယ်။

Web Development 89ငပ


့် တ်သတ်၍ Online သင်တန်းများကိလ
# ည်း A Programmer

မ9တစ်ဆငေ
့် လ့လာ8ိင
# ေ
် နပါGပီ။

သင်တန်းများကိ# :ကည့@
် A ရန် - https://bit.ly/385lLsZ

Not for sale 56

You might also like