कुंजी यह है कि आप unset जैसे ही आपको उनकी आवश्यकता नहीं है, आपके वैश्विक चर शामिल हैं।
आपको स्थानीय चर और ऑब्जेक्ट गुणों के लिए स्पष्ट रूप से अनसेट करने की आवश्यकता नहीं है क्योंकि जब कार्य गुंजाइश से बाहर हो जाता है या ऑब्जेक्ट नष्ट हो जाता है तो ये नष्ट हो जाते हैं।
PHP सभी चर के लिए संदर्भ संख्या रखता है और जैसे ही यह संदर्भ गणना शून्य हो जाती है, उन्हें (अधिकांश स्थितियों में) नष्ट कर देता है। ऑब्जेक्ट्स में एक आंतरिक संदर्भ गणना होती है और वेरिएबल स्वयं (ऑब्जेक्ट संदर्भ) प्रत्येक में एक संदर्भ गणना होती है। जब सभी ऑब्जेक्ट संदर्भ नष्ट हो जाते हैं क्योंकि उनके संदर्भ coutns 0 हिट हो जाते हैं, तो ऑब्जेक्ट स्वयं नष्ट हो जाएगा। उदाहरण:
$a = new stdclass; //$a zval refcount 1, object refcount 1
$b = $a; //$a/$b zval refcount 2, object refcount 1
//this forces the zval separation because $b isn't part of the reference set:
$c = &$a; //$a/$c zval refcount 2 (isref), $b 1, object refcount 2
unset($c); //$a zval refcount 1, $b 1, object refcount 2
unset($a); //$b refcount 1, object refcount 1
unset($b); //everything is destroyed
लेकिन इस परिदृश्य पर विचार:
class A {
public $b;
}
class B {
public $a;
}
$a = new A;
$b = new B;
$a->b = $b;
$b->a = $a;
unset($a); //cannot destroy object $a because $b still references it
unset($b); //cannot destroy object $b because $a still references it
ये चक्रीय संदर्भ हैं जहां में आप स्पष्ट रूप से gc_collect_cycles
साथ कचरा कलेक्टर आह्वान कर सकते हैं पीएचपी 5.3 के कचरा कलेक्टर किक।।
मैनुअल में Reference Counting Basics और Collecting Cycles भी देखें।