PHP with OOP

PHP 5.2 version မွာေတာ့ OOP ကုိ အေထာက္အပံ့ေပးႏိုင္လာတာေတြ႕ရပါတယ္။

PHP 5.3 ကုိေရာက္တဲ့အခ်ိန္မွာေတာ့ Fully OOP အျဖစ္ေျပာင္းလဲ လာခဲ့ပါေတာ့တယ္ ။ ဒီအခ်ိန္မွာ PHP

 ကုိမူလအတိုင္း Procedural ေရးႏိုင္သလို OOP အေနနဲ႕လည္းေရးလို႕ရလာပါတယ္ ။

 Framework ေတြ IDE ေတြ အသံုးျပဳမယ္ဆိုရင္ေတာ့ OOP ကုိမသံုးမျဖစ္သံုးရေတာ့မွာျဖစ္ပါတယ္ ။

 အေၾကာင္းကေတာ့ Framework မွာနဂိုကေရးၿပီးသားပါလာတဲ့ Class ကုိ  inheritanceလုပ္သံုးတာ

တို႕ Overwrite လုပ္တာတို႕နဲ႕ Customize  ျပန္လည္ဖန္တီးရတာေၾကာင့္ပဲျဖစ္ပါတယ္ ။

Declaring a Class

အေျခခံ Class ေၾကျငာတဲ့ပံုစံကေတာ့ ရိုးရိုးေလးပါပဲ ။

class myclass{

// Class contents go here

}

myclass ဆိုတဲ့နာမည္နဲ႕ class တစ္ခု ကုိဖန္တီးလိုက္တယ္ scope{} ႏွစ္ခုၾကားမွာေတာ့ constants,

variables and functions ေတြ(methods ေတြ)ပါ၀င္ႏိုင္ပါတယ္ ။

Instantiating an Object

Class တစ္ခုဖန္တီးၿပီးရင္ဒီတိုင္းသံံုးလို႕မရပါဘူး ။ သူ႕ကုိ Instantiate (Obj ေဆာက္) ၿပီးမွသံုးလို႕ရပါတယ္။

C# တို႕ Java တို႕သင္ဖူးတဲ့သူဆို ပိုနားလည္လြယ္ပါလိမ့္မယ္။Obj ေဆာက္ဖို႕အတြက္ new ဆိုတဲ့ keyword

ေလးကုိသံုးပါတယ္။ဒီေနရာမွာ Obj ဟာ Reference type ဆိုတာ သိဖို႕လိုပါမယ္ ။ ဥပမာ

$myClassInstance = new myClass();

$copyInstance = $myClassInstance(); ဒီလိုေရးခဲ့မယ္ဆိုရင္ $myClassInstance နဲ႔ $copyInstance

တို႕ဟာ Object တစ္ခုတည္းကုိ Reference လုပ္သံုးေနတယ္ဆိုၿပီး သတ္မွတ္ရမွာျဖစ္ပါတယ္။

တကယ္လို႕


$myClassInstance = new myClass();


$myClassInstance2 = new myClass();ဒီလိုေရးခဲ့မယ္ဆိုရင္ေတာ့ $myClassInstance နဲ႕ $myClassInstance2

တို႕ဟာ Class တစ္ခုတည္းေပမယ့္ Object ႏွစ္ခုျဖစ္သြားၿပီလို႕ သိရမွာျဖစ္ပါတယ္။

Class Inheritance

Class တစ္ခုကုိ အျခား Class တစ္ခုကေန extends လုပ္ၿပီးယူသံဳးတာမ်ိဳးကုိ Class inheritance လုပ္တယ္

လို႕ေခၚပါတယ္။လြယ္လြယ္ေျပာရရင္ အေဖပိုင္တဲ့ပစၥည္းကုိသားကယူသံုးတာ မ်ိဳးလို႕ မွတ္ထားလိုက္ပါ။

class a {

function test()

{

echo "a::test called";

}

function func()

{

echo "a::func called";

}

}

class b extends a {

function test()

{

echo "b::test called";

}

}

class c extends b {

function test()

{

parent::test();

}

}

class d extends c {

function test()

{

b::test();

}

}

$a = new a();

$b = new b();

$c = new c();

$d = new d();

$a->test(); // Outputs "a::test called"

$b->test(); // Outputs "b::test called"

$b->func(); // Outputs "a::func called"

$c->test(); // Outputs "b::test called"

$d->test(); // Outputs "b::test called"

ဒါေလးကလြယ္ေအာင္ျပထားတာပါ ။ class a မွာ test() ရယ္ func() ရယ္ function ႏွစ္ခုပါပါတယ္။

Class b က်ေတာ့ a ကုိ extends ယူလိုက္တယ္ ။ ဒီေတာ့ a ထဲက function ကုိ္သူယူသံုးလို႕ရသြားတယ္။

အဲဒီက test() ကုိ ျပန္ျပင္ၿပီးသံုးလိုက္တယ္ ။ ေနာက္ထပ္ class ေတြထပ္ၿပီး extends လုပ္သံုးတယ္။

$a-> test() ဆိုတာက $a ထဲက test() ဆိုတဲ့ function(method လို႕လည္းေခၚ) ကုိအလုပ္လုပ္ခိုင္း

မယ္လို႕ဆိုလိုတာပါ။ $a ဆိုတာက class a ကုိ object ေဆာက္လိုက္ၿပီးေနာက္ေခၚတဲ့နာမည္ပါ။

-> ဆိုတဲ့ျမားေလးက " of " ဆိုတဲ့သေဘာမ်ိဳးေဖာ္ေဆာင္ေပးပါတယ္ ။

ဒီေန၇ာမွာ မွတ္ထားရမယ့္ keyword ေလးက extends ရယ္ Parent ဆိုတာေလးရယ္မွတ္ထားလိုက္ပါ။

ပင္မ Class ကုိ Parent Class , extends လုပ္သံုးတဲ့ Class ကိုေတာ့ Child Class ရယ္လို႕လည္းေခၚၾက

ပါတယ္။

ေနာက္တစ္ခုကုိထပ္ၾကည္႕ရေအာင္ ။ပထမတစ္ခုသိထားမယ္ဆိုရင္ဒါဆုိရင္ေတာ့ေတာ္ေတာ္ေလးနားလည္

သြားလိမ့္မယ္လို႕ေမွ်ာ္လင့္ပါတယ္ ။အဲဒီမွာက Car ဆိုတဲ့ Class တစ္ခုဖန္တီးပါတယ္။ Class ထဲမွာ Variable

ေၾကျငာခ်င္ရင္ var ဆိုတဲ့ Keywordေလးသံုးရပါတယ္ ။

<?php

Class Car{

var $wheels=4;

var $doors=4;

Function wheelsdoors(){

Return ($this -> wheels + $this-> doors);    

     }

}

Class CompactCar extends car{

var $doors=2;

}

$car1=new Car();

$car2=new CompactCar();

echo $car1->  wheels ."<br/>";

echo $car1->  doors ."<br/>";

echo $car1->  wheelsdoors() . "<br/>";

echo "<br/>";

echo $car2->  wheels ."<br/>";

echo $car2->  doors ."<br/>";

echo $car2->  wheelsdoors() . "<br/>";

echo "<br/>";

?>

ကုိယ့္ဖာသာကုိယ္စဥ္းစားၾကည့္ Browser မွာ Output ဘာျပမယ္ထင္သလဲ ?

ၿပီးမွ လက္ေတြ႕ Run ၾကည့္ပါ ။OK :)