जहां तक मुझे पता है (जो बहुत कम है), दो तरीके हैं, दिए गए हैं:
$var = new object()
फिर:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
अन्य बेहतर विधि? क्या मैं यहाँ बालों का विभाजन कर रहा हूँ?
जहां तक मुझे पता है (जो बहुत कम है), दो तरीके हैं, दिए गए हैं:
$var = new object()
फिर:
// Method 1: Set to null
$var = null;
// Method 2: Unset
unset($var);
अन्य बेहतर विधि? क्या मैं यहाँ बालों का विभाजन कर रहा हूँ?
जवाबों:
तुम खोज रहे हो unset()
।
लेकिन ध्यान रखें कि आप किसी वस्तु को स्पष्ट रूप से नष्ट नहीं कर सकते।
यह वहाँ रहेगा, हालांकि अगर आप ऑब्जेक्ट को अनसेट करते हैं और आपकी स्क्रिप्ट PHP को मेमोरी में धकेल देती है तो जरूरी नहीं है कि ऑब्जेक्ट कचरा एकत्र किया जाए। मैं unset()
(अशक्त करने के लिए इसे स्थापित करने के विपरीत) के साथ जाऊंगा क्योंकि ऐसा लगता है कि इसका बेहतर प्रदर्शन है ( PHP आधिकारिक मैनुअल से टिप्पणियों में से एक पर परीक्षण नहीं किया गया है)।
कहा कि, ध्यान रखें कि पेज को सर्व करते ही PHP हमेशा ऑब्जेक्ट्स को नष्ट कर देता है। तो यह केवल वास्तव में लंबे छोरों और / या भारी गहन पृष्ठों पर होना चाहिए।
unset()
वस्तु के संदर्भ को हटा?
इस बारे में कई गलत समझ बताने वाली एक आसान पोस्ट:
यह विध्वंसक कैसे काम करता है, इसके बारे में कई गलत धारणाएं शामिल हैं। PHP5 डॉक्टर के अनुसार, इसे स्पष्ट रूप से कॉल करना वास्तव में आपके वैरिएबल को नष्ट नहीं करेगा:
PHP 5, अन्य ऑब्जेक्ट-ओरिएंटेड भाषाओं जैसे C ++ जैसी विनाशकारी अवधारणा का परिचय देता है। विध्वंसक विधि को वैसे ही कहा जाएगा जैसे कि किसी विशेष वस्तु के लिए, या शटडाउन अनुक्रम के दौरान किसी भी क्रम में कोई अन्य संदर्भ नहीं हैं।
ऊपर दी गई पोस्ट बताती है कि चर को शून्य पर सेट करना कुछ मामलों में काम कर सकता है, जब तक कि आवंटित मेमोरी को इंगित नहीं किया जाता है।
संक्षिप्त उत्तर: दोनों की आवश्यकता है।
मुझे लगता है कि सही उत्तर दिया गया था लेकिन न्यूनतम रूप से। हाँ आम तौर पर परेशान () "गति" के लिए सबसे अच्छा है, लेकिन अगर आप तुरंत मेमोरी को पुनः प्राप्त करना चाहते हैं (सीपीयू की कीमत पर) अशक्त का उपयोग करना चाहते हैं।
अन्य लोगों की तरह, अशक्त करने के लिए सेटिंग का मतलब यह नहीं है कि सब कुछ पुनः प्राप्त हो गया है, आप साझा की गई मेमोरी (असंबद्ध) ऑब्जेक्ट्स को नष्ट कर सकते हैं जो ऑब्जेक्ट के विनाश को रोकेंगे। इसके अलावा, जैसे दूसरों ने कहा है, आप वैसे भी वस्तुओं को स्पष्ट रूप से "नष्ट" नहीं कर सकते हैं, इसलिए आपको इसे वैसे भी करने की कोशिश नहीं करनी चाहिए।
आपको यह पता लगाने की आवश्यकता होगी कि कौन सा आपके लिए सबसे अच्छा है। इसके अलावा, आप __destruct () का उपयोग किसी ऐसी वस्तु के लिए कर सकते हैं जिसे असंतुष्ट या अशक्त कहा जाएगा, लेकिन इसका उपयोग सावधानी से किया जाना चाहिए और जैसा दूसरों ने कहा है, कभी भी सीधे नहीं कहा जाना चाहिए!
देख:
http://www.stoimen.com/blog/2011/11/14/php-dont-call-the-destructor-explicitly/
यह एक सरल सिद्ध है कि आप किसी वस्तु को नष्ट नहीं कर सकते, आप केवल एक लिंक को नष्ट कर सकते हैं।
$var = (object)['a'=>1];
$var2 = $var;
$var2->a = 2;
unset($var2);
echo $var->a;
रिटर्न
2
इसे यहां देखें: https://eval.in/1054130
$var2
जो एक संदर्भ था $var
। अब आप इसे नष्ट कर देते हैं $var
और मान लेते हैं कि वस्तु पर कोई अन्य संदर्भ नहीं है, तो आप कर रहे हैं।
ऐसी स्थिति में हो सकता है जब आप एक नई mysqli ऑब्जेक्ट बना रहे हों।
$MyConnection = new mysqli($hn, $un, $pw, $db);
लेकिन इसके बाद भी आप ऑब्जेक्ट को बंद करते हैं
$MyConnection->close();
यदि आप print_r()
सामग्री की जाँच करने के लिए उपयोग करेंगे $MyConnection
, तो आपको नीचे एक त्रुटि मिलेगी:
Error:
mysqli Object
Warning: print_r(): Property access is not allowed yet in /path/to/program on line ..
( [affected_rows] => [client_info] => [client_version] =>.................)
जिस स्थिति में आप उपयोग नहीं कर सकते unlink()
क्योंकि unlink()
इसके लिए पथ नाम स्ट्रिंग की आवश्यकता होगी लेकिन इस मामले $MyConnection
में एक वस्तु है।
तो आपके पास इसके मूल्य को शून्य करने का एक और विकल्प है:
$MyConnection = null;
अब चीजें ठीक हो जाती हैं, जैसा कि आपने अपेक्षा की है। आपके पास चर के अंदर कोई भी सामग्री नहीं है $MyConnection
और साथ ही आपने पहले ही mysqli ऑब्जेक्ट को साफ कर दिया है।
आपके चर का मान सेट करने से पहले ऑब्जेक्ट को बंद करने के लिए एक अनुशंसित अभ्यास है null
।
मैं परेशान होकर जाऊंगा क्योंकि यह कचरा संग्रहकर्ता को बेहतर संकेत दे सकता है ताकि स्मृति फिर से जल्द उपलब्ध हो सके। इस बात से सावधान रहें कि कोई भी वस्तु या तो अन्य सन्दर्भों की ओर इशारा करती है या पहले परेशान हो जाती है या फिर आपको वास्तव में कचरा बीनने वाले को इंतजार करना होगा क्योंकि तब उनके पास कोई हैंडल नहीं होगा।
new
एक बार उपयोग करते हैं , तो हमें एक बार उपयोग करना चाहिएdelete
। यह PHP में सच नहीं है? जब वस्तु की आवश्यकता नहीं रह जाती है तो स्वचालित कचरा संग्रहण होता है?