ကဗ်ာ/ရသ/နည္းပညာ

PHP with OOP

Sep 16, 2013
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 :)

No comments:

Post a Comment