परिचय
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग शब्दावली में, कंस्ट्रक्टर क्लास के अंदर परिभाषित एक मेथड होता है जो ऑब्जेक्ट के निर्माण के समय ऑटोमैटिकली कॉल होता है। कंस्ट्रक्टर मेथड का उद्देश्य ऑब्जेक्ट को इनिशियलाइज़ करना होता है। PHP में, __construct नाम का एक विशेष मेथड कंस्ट्रक्टर के रूप में कार्य करता है।
सिंटैक्स
__construct([mixed $args = "" [, $...]]): void
उदाहरण 1: बेसिक कंस्ट्रक्टर
<?php
class myclass {
function __construct() {
echo "object initialized";
}
}
$obj = new myclass();
?>
आउटपुट
object initialized
उदाहरण 2: आर्गुमेंट्स के साथ कंस्ट्रक्टर
क्लास प्रॉपर्टीज़ को आर्गुमेंट्स वाले कंस्ट्रक्टर द्वारा इनिशियलाइज़ किया जाता है:
<?php
class rectangle {
var $height;
var $width;
function __construct($arg1, $arg2) {
$this->height = $arg1;
$this->width = $arg2;
}
function show() {
echo "Height=$this->height Width=$this->width";
}
}
$obj = new rectangle(10, 20);
$obj->show();
?>
आउटपुट
Height=10 Width=20
इनहेरिटेंस में कंस्ट्रक्टर
यदि पैरेंट क्लास में कंस्ट्रक्टर परिभाषित है, तो इसे चाइल्ड क्लास के कंस्ट्रक्टर के भीतर parent::__construct द्वारा कॉल किया जा सकता है। हालांकि, यदि चाइल्ड क्लास कंस्ट्रक्टर परिभाषित नहीं करती है, तो यह अपने बेस क्लास से इसे इनहेरिट करती है।
<?php
class a {
function __construct() {
echo "this is a constructor of base class\n";
}
}
class b extends a {
function __construct() {
parent::__construct();
echo "this a constructor class b\n";
}
}
class c extends a {
// कोई कंस्ट्रक्टर नहीं - पैरेंट से इनहेरिट होगा
}
$a = new a();
$b = new b();
$c = new c();
?>
आउटपुट
this is a constructor of base class this is a constructor of base class this a constructor class b this is a constructor of base class
डिस्ट्रक्टर
डिस्ट्रक्टर एक मेथड है जो ऑटोमैटिकली कॉल होता है जैसे ही गार्बेज कलेक्टर को पता चलता है कि किसी विशेष ऑब्जेक्ट के कोई और रेफरेंस नहीं हैं। PHP में, डिस्ट्रक्टर मेथड का नाम __destruct होता है। शटडाउन सीक्वेंस के दौरान भी, ऑब्जेक्ट्स नष्ट हो जाएंगे। डिस्ट्रक्टर मेथड कोई आर्गुमेंट नहीं लेता, न ही कोई डेटा टाइप लौटाता है।
उदाहरण
<?php
class myclass {
function __construct() {
echo "object is initialized\n";
}
function __destruct() {
echo "object is destroyed\n";
}
}
$obj = new myclass();
?>
आउटपुट
object is initialized object is destroyed
महत्वपूर्ण बिंदु
- PHP 5.3.3+ में, यदि चाइल्ड क्लास पैरेंट के कंस्ट्रक्टर को कॉल नहीं करती, तो पैरेंट कंस्ट्रक्टर नहीं चलता (PHP 5.3.2 के व्यवहार से अलग)।
- डिस्ट्रक्टर में ऑब्जेक्ट को नष्ट करने से पहले क्लीनअप कार्य (फाइल क्लोज, डेटाबेस डिसकनेक्ट) किए जा सकते हैं।
- स्क्रिप्ट समाप्ति पर सभी ऑब्जेक्ट्स के डिस्ट्रक्टर कॉल होते हैं (शटडाउन सीक्वेंस)।
- डिस्ट्रक्टर में एक्सेप्शन फेंकना घातक त्रुटि का कारण बनता है।