दिलचस्प पोस्ट
एक डेटा फ्रेम में कॉलम (ऑब्जेक्ट्स) को क्रमबद्ध करके समूह (क्वार्टिल्स, डिकाइल, इत्यादि) को जल्दी कैसे तैयार किया जाए कोड गोल्फ: शब्दों की संख्या इसकी पैरामीटर सूची के लिए चलने की प्रक्रिया कैसे पूछें? (खिड़कियां, सी ++) निर्धारित करें कि एक स्ट्रिंग जावा में एक पूर्णांक है टाइल्स की समान ऊंचाई के लिए geom_tile और facet_grid / facet_wrap C # winforms कॉम्बोबोक्स गतिशील स्वत: पूर्ण इनो सेटअप घटकों पर लंबे विवरण जावा में एक बूलियन पर एक बिटवे ऑपरेटर का प्रभाव 600851475143 के लिए "पूर्णांक संख्या बहुत बड़ी" त्रुटि संदेश कार्य निष्पादन के लिए विफल ': ऐप: transformClassesWithDexForDebug' एंड्रॉइड के लिए Google साइन इन को लागू करते समय अनाम वर्ग की एक सामान्य सूची 'R +' और 'a +' के बीच अंतर क्या है जब अजगर में खुली फाइल? एंड्रॉइड स्टूडियो – एसवीएन शाखा से मर्ज करने में असमर्थ PHP से कमांड लाइन में stdin के रूप में चर को कैसे पार करें I ld मौजूदा पुस्तकालय नहीं ढूँढ सकता

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

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

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

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

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

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

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

 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" से प्रसन्न होगा। 😉