दिलचस्प पोस्ट
Http: // www के साथ या बिना यूआरएल मैच करने के लिए नियमित अभिव्यक्ति पैटर्न Node.js को हरअथ के साथ उपयोग करने के लिए पर्यावरण विशिष्ट विन्यास सेट करना सीएसएस, छवियां, जेएस आईआईएस में नहीं लोड हो रहा है पायथन में थ्रेड स्थानीय स्टोरेज जावास्क्रिप्ट में एक बाहरी स्थानीय JSON फ़ाइल कैसे पढ़ें किसी भी पेपैल खाते में पैसे कैसे भेज सकते हैं क्या मैं एक्सएएमएल (पूर्व .नेट 4 फ्रेमवर्क) में एक सामान्य प्रकार निर्दिष्ट कर सकता हूं? सीएसएस बल छवि का आकार बदलना और पहलू अनुपात रखना Android डिवाइस स्क्रीन सामग्री कैप्चर कैसे करें? कन्स्ट्रक्टर से क्या मिलता है? एंड्रॉइड में सिंगलटन्स बनाम एप्लिकेशन प्रसंग? MySQL 600K पंक्तियों से 10 यादृच्छिक पंक्तियों का चयन करें जावा दिनांक – डेटाबेस में सम्मिलित करें कैसे जावास्क्रिप्ट में क्षेत्रों / कोड पतन लागू करने के लिए रूबी रेगुलर एक्सप्रेशन के बीच अंतर \ ए \ z और ^ $ के बीच का अंतर

सख्त मानदंड: संदर्भ से केवल चर को पारित किया जाना चाहिए

$el = array_shift($instance->find(..)) 

उपरोक्त कोड किसी तरह सख्त स्टैंडर्स चेतावनी की रिपोर्ट करता है, लेकिन यह नहीं होगा:

 function get_arr(){ return array(1,2); } $el = array_shift(get_arr()); 

तो जब भी चेतावनी की रिपोर्ट करेंगे?

वेब के समाधान से एकत्रित समाधान "सख्त मानदंड: संदर्भ से केवल चर को पारित किया जाना चाहिए"

निम्नलिखित कोड पर विचार करें:

 error_reporting(E_STRICT); class test { function test_arr(&$a) { var_dump($a); } function get_arr() { return array(1,2); } } $t= new test; $t->test_arr($t->get_arr()); 

यह निम्नलिखित आउटपुट उत्पन्न करेगा:

 Strict Standards: Only variables should be passed by reference in test.php on line 14 array(2) { [0]=> int(1) [1]=> int(2) } 

कारण? test::get_arr() विधि एक चर नहीं है और सख्त मोड के तहत यह एक चेतावनी उत्पन्न करेगा। यह व्यवहार अत्यंत गैर-सहज है क्योंकि get_arr() विधि एक सरणी मान देता है।

इस त्रुटि को सख्त मोड में लाने के लिए या तो विधि के हस्ताक्षर को परिवर्तित करें ताकि यह संदर्भ का उपयोग न करे:

 function test_arr($a) { var_dump($a); } 

चूंकि आप array_shift के हस्ताक्षर नहीं बदल सकते हैं इसलिए आप एक मध्यवर्ती चर का उपयोग भी कर सकते हैं:

 $inter= get_arr(); $el= array_shift($inter); 

$instance->find() वेरिएबल का संदर्भ देता है

जब आप इस संदर्भ को कार्य करने के लिए एक तर्क के रूप में उपयोग करने का प्रयास कर रहे हैं, तो इसे चर पर पहले संग्रहीत किए बिना आपको रिपोर्ट प्राप्त होती है

यह स्मृति लीक को रोकने में मदद करता है, और शायद अगले PHP संस्करणों में त्रुटि हो जाएगी।

आपका दूसरा कोड त्रुटि को फेंक देगा अगर यह लिखा होगा (फ़ंक्शन हस्ताक्षर में नोट करें):

 function &get_arr(){ return array(1,2); } $el = array_shift(get_arr()); 

तो एक त्वरित (और बहुत अच्छा नहीं) तय होगा:

 $el = array_shift($tmp = $instance->find(..)); 

असल में आप पहले अस्थायी चर के लिए एक असाइनमेंट करते हैं, और वैरिएबल को एक तर्क के रूप में भेजते हैं।

त्रुटि का कारण है आंतरिक PHP प्रोग्रामिंग डेटा स्ट्रक्चर फ़ंक्शन का उपयोग, array_shift () [php.net/end]। फ़ंक्शन पैरामीटर के रूप में एक सरणी लेता है। यद्यपि एक ऐपरसेंड को "मैनुअल" में "array_shift ()" के प्रोटोटाइप में इंगित किया गया है, उस फ़ंक्शन की विस्तारित परिभाषा में निम्नलिखित कोई चेतावनी देने वाले दस्तावेज नहीं हैं, न ही कोई स्पष्ट स्पष्टीकरण है कि पैरामीटर वास्तव में संदर्भ से पारित किया गया है। यह / समझ / है। मुझे समझ में नहीं आया, हालांकि, इसलिए मुझे त्रुटि के कारण का पता लगाने के लिए मुश्किल था

कोड पुन: उत्पन्न करें:

 function get_arr() { return array(1,2); } $array = get_arr(); $el = array_shift($array); 

दूसरा स्निपेट या तो काम नहीं करता है और यही कारण है कि array_shift एक संशोधक फ़ंक्शन है, जो इसके तर्क को बदलता है, इसलिए इसकी अपेक्षा है कि इसके पैरामीटर एक संदर्भ हो, और आप ऐसा कुछ संदर्भ नहीं कर सकते जो एक चर नहीं है। यहां Rasmus के स्पष्टीकरण देखें: http://bugs.php.net/bug.php?id=48937

यह कोड:

 $monthly_index = array_shift(unpack('H*', date('m/Y'))); 

इसमें संपादित करें:

 $date_time = date('m/Y'); $unpack = unpack('H*', $date_time); array_shift($unpack); 

ठीक है, ऐसे मामलों में, आप फ़ंक्शन के सामने "@" का उपयोग करके संदेशों को दबाने के लिए हमेशा PHP को बता सकते हैं।

$monthly_index = @array_shift(unpack('H*', date('m/Y')));

यह सभी त्रुटियों को इस तरीके से दबाकर सर्वोत्तम प्रोग्रामिंग प्रथाओं में से एक नहीं हो सकता है, लेकिन कुछ मामलों में (जैसे यह एक) यह आसान है और स्वीकार्य है

परिणामस्वरूप, मुझे यकीन है कि आपका मित्र सिसएडमिन कम प्रदूषित "error.log" से प्रसन्न होगा। 😉