परिचय
कमजोर रेफरेंस के साथ, किसी ऑब्जेक्ट का रेफरेंस बनाए रखना संभव है जो ऑब्जेक्ट को नष्ट होने से नहीं रोकता। कैश जैसी संरचनाओं को लागू करने के लिए कमजोर रेफरेंस का उपयोग किया जा सकता है।
एक कमजोर रेफरेंस सामान्य रेफरेंस के समान है, सिवाय इसके कि यह गार्बेज कलेक्टर को ऑब्जेक्ट को कलेक्ट करने से नहीं रोकता। यदि उस ऑब्जेक्ट के मजबूत रेफरेंस नहीं मिलते, तो यह तुरंत मेमोरी से हटा दिया जाएगा। इस तरह कैश के अधिकांश लाभों को मेमोरी समस्याओं के बिना लागू करना संभव है।
WeakReference क्लास PHP 7.4 में पेश की गई है। इस संस्करण से पहले, वही प्रभाव weakref एक्सटेंशन द्वारा प्राप्त किया जाता था। WeakReference क्लास की निम्न संरचना है:
सिंटैक्स
WeakReference {
/* Methods */
public __construct ( void )
public static create ( object $referent ) : WeakReference
public get ( void ) : ?object
}
मेथड्स
- public WeakReference::__construct ( void ) - WeakReference क्लास के इंस्टेंटिएशन को रोकता है। इसे फैक्टरी मेथड
WeakReference::create()से इंस्टेंटिएट किया जा सकता है। - public static WeakReference::create ( object $referent ) : WeakReference - एक नया WeakReference बनाता है।
- public WeakReference::get ( void ) : ?object - कमजोर रेफरेंस किए गए ऑब्जेक्ट को प्राप्त करता है। यदि ऑब्जेक्ट पहले ही नष्ट हो चुका है, तो NULL लौटाता है।
जनरेटर उदाहरण
निम्न उदाहरण में myclass का ऑब्जेक्ट है। इसके ऑब्जेक्ट का WeakReference एक रेफरेंस दिखाता है। ऑब्जेक्ट को फिर अनसेट किया जाता है। अब WeakReference NULL लौटाता है।
उदाहरण
<?php
class myclass {
function Hello() {
echo "Hello";
}
}
$obj = new myclass();
$ref = WeakReference::create($obj);
var_dump($ref->get());
unset($obj);
var_dump($ref->get());
?>
आउटपुट
object(myclass)#1 (0) { }
NULL
उपयोग के मामले: कैश, ऑब्जर्वर पैटर्न, सर्कुलर रेफरेंस रोकना, बड़ी ऑब्जेक्ट को मेमोरी में अनावश्यक रूप से रखे बिना संदर्भित करना।