Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP कंस्ट्रक्टर और डिस्ट्रक्टर: __construct और __destruct


परिचय

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग शब्दावली में, कंस्ट्रक्टर क्लास के अंदर परिभाषित एक मेथड होता है जो ऑब्जेक्ट के निर्माण के समय ऑटोमैटिकली कॉल होता है। कंस्ट्रक्टर मेथड का उद्देश्य ऑब्जेक्ट को इनिशियलाइज़ करना होता है। 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 के व्यवहार से अलग)।
  • डिस्ट्रक्टर में ऑब्जेक्ट को नष्ट करने से पहले क्लीनअप कार्य (फाइल क्लोज, डेटाबेस डिसकनेक्ट) किए जा सकते हैं।
  • स्क्रिप्ट समाप्ति पर सभी ऑब्जेक्ट्स के डिस्ट्रक्टर कॉल होते हैं (शटडाउन सीक्वेंस)।
  • डिस्ट्रक्टर में एक्सेप्शन फेंकना घातक त्रुटि का कारण बनता है।
  1. - PHP में फाइनल क्लास और फाइनल मेथड समझाया गया

    फाइनल कीवर्ड PHP5 द्वारा ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कॉन्सेप्ट से संबंधित पेश किया गया है। लेकिन इससे पहले कि हम फाइनल पर आगे बढ़ें, हमें यह सुनिश्चित करने की आवश्यकता है कि हमें इनहेरिटेंस कॉन्सेप्ट की अच्छी समझ है। इनहेरिटेंस में, हम एक क्लास को दूसरी क्लास से इनहेरिट कर सकते हैं। साथ ही, हम इ

  1. - C# में प्राइवेट कंस्ट्रक्टर्स और सिंगलटन क्लासेस

    प्राइवेट कंस्ट्रक्टर का उपयोग केवल स्टेटिक मेंबर्स वाली क्लासेस में किया जाता है जैसा कि नीचे दिखाया गया है:class Demo { // private constructor private Demo() { } public static a = 10; }एक सिंगलटन क्लास में सामान्य मेथड्स होते हैं और आप इसे एक इंस्टेंस का उपयोग करके कॉल कर सकते हैं।क्लास

  1. - जावा में कंस्ट्रक्टर्स क्या हैं?

    जावा में कंस्ट्रक्टर सिंटैक्टिकली मेथड्स के समान होता है। अंतर यह है कि कंस्ट्रक्टर का नाम क्लास के नाम के समान होता है और इसका कोई रिटर्न टाइप नहीं होता। आपको कंस्ट्रक्टर को कॉल करने की आवश्यकता नहीं होती; यह इंस्टेंटिएशन के समय इम्प्लिसिटली इनवोक होता है। कंस्ट्रक्टर का मुख्य उद्देश्य क्लास के इं