Sunday, July 29, 2012

php constructor


Constructor ဆိုတာ တည္ေဆာက္တာပါ
php မွာဆိုရင္ classes ေတြကိုတည္ေဆာက္ၾကပါတယ္အဲဒီအခါ ဒီနည္းေတြကအသံုး၀င္ပါတယ္
function ကေတာ႔ void __construct ([ mixed $args [, $... ]] )
PHP 5 မွာဆိုရင္ classes ေတြအတြက္ constructor ကို declare လုပ္ဖို႔ developer ေတြကိုခြင္႔ျပဳေပးထားပါတယ္
constructor method တစ္ခုရွိတဲ႔ classes ဟာ object အသစ္တစ္ခုတည္ေဆာက္လိုက္တိုင္း ျပန္ေခၚသံုးလို႔ရပါတယ္
ဒါေၾကာင္႔ constructor method ကိုအသံုးျပဳခင္ object ကို ဘယ္ အတြက္ အသံုးျပဳမယ္ဆိုတာ စဥ္းစားဖို႔လိုအပ္ပါတယ္
မွတ္ခ်က္၊  ၊အကယ္ရွ္ ကၽြန္ေတာ္တို႔က constructor ထဲမွာ child class ကို define လုပ္ခဲ႔တယ္ဆိုရင္ Parent constructors ေတြကို ေခၚလို႔ရမွာမဟုတ္ပါဘူး
Parent constructor ကိုမွျပန္ေခၚသံုးခ်င္တယ္ဆိုရင္ေတာ႔ child constructor ထဲမွာ ေအာက္ကလိုမ်ိဳးေရးဖို႔ေတာ႔လိုပါတယ္

<?php
class BaseClass {
    function __construct() {
        print "In BaseClass constructor \br";
        }
    }
class SubClass extends BaseClass {
    functioon __construct() {
        parent::__construct();
        print "In SubClass constructor \br";
    }
}
$obj1= new BaseClass();
$obj2= new SubClass();
?>
line2 => BaseClass ဆိုတဲ႔ parent class တစ္ခုေဆာက္လိုက္ပါတယ္
line3 => function သံုးျပီး constructor method တစ္ခုဖန္တီးလိုက္ပါတယ္
line4 =>print သံုးျပီး output ကိုထုတ္ျပဖို႔ေရးထားတာပါ ဒီလိုင္းမွာ output မထြက္ေသးပါဘူး
            ဘာလို႔လဲဆိုေတာ႔ ကၽြန္ေတာ္တို႔က function ေရးထားလို႔ပါ object အေနနဲ႔ပဲ႔ output ထုတ္နိုင္မွာပါ
Line7 => parent class တစ္ခုကိုအေျခခံျပီး SubClass အခြဲေလးတစ္ခုကိုထပ္ျပီး Class အျဖစ္ေဆာက္လိုက္ပါတယ္
line8  =>construct ဆိုျပီး function တစ္ခုထပ္ေရးပါတယ္
line9  =>BaseClass ကို parent နဲ႔ျပန္ေခၚျပီး အထဲက __construct method နဲ႔ output ထုတ္ဖို႔ျပန္ေခၚသံုးထားပါတယ္
line10=>In SubClass ကို ျပဖို႔အတြက္ SubClass ထဲမွာေရးထားပါတယ္
line14=>$obj1 ဆိုျပီး new keyword ကိုသံုးျပီး BaseClass ဆိုတဲ႔ parent class ကို object တစ္ခုဖန္တီးပါတယ္
line15=> $obj2 ဆိုျပီးေတာ႔ parent class ရဲ႕ အခြဲျဖစ္တဲ႔ SubClass ကို object အျဖစ္ေျပာင္းလိုက္ပါတယ္

အရင္က php 5 မွာဆိုရင္ ေပးထားတဲ႔ class အတြက္ __construct() function ကိုရွာေတြ႔မွာမဟုတ္ပါဘူး
ဒါကအရင္ကနာမည္ေပးထားခဲ႔တဲ႔ constructor function အတိုင္းပဲ႔ရွာေပးမွာပါအျခားနည္းေတြနဲ႔မတူတာကေတာ႔
 မတူညီတဲ႔ parameter နဲ႔ construct က overriden လုပ္တဲ႔ခါ parent constructor method ထဲမွာရွိတာထက္ E_STRICT Level error message ကိုျပမေပးနိုင္ေတာ႔ပါဘူး

 PHP 5.3.3 မွာဆိုရင္
 non-namespaced classes က ေျပာင္းလဲမွုမရွိပါဘူး
 ဥပမာေလးပါ namespaced classes ထဲမွာရွိတဲ႔ Constructors
 <?php
namespace Foo;
class Bar {
    public function Bar() {
        // treated as constructor in PHP 5.3.0-5.3.2
        // treated as regular method as of PHP 5.3.3
    }
}
?>

No comments:

Post a Comment

Thanks for your comments
Welcome from cyberoot