रुचि रखने वालों के लिए, मैंने इस विषय को एक छोटे से लेख में विस्तारित किया है, जो कुछ हद तक बेहतर संरचित रूप में नीचे दी गई जानकारी प्रदान करता है: PHP के लिए निश्चित मार्गदर्शिका
IMHO आपको केवल ऐप को "E_NOTICE संगत" बनाने के बारे में नहीं सोचना चाहिए, बल्कि पूरी चीज़ का पुनर्गठन करना चाहिए। बीत रहा है सैकड़ों अपने कोड में अंकों की कि नियमित रूप से एक नहीं बल्कि बुरी तरह से संरचित प्रोग्राम की तरह न के बराबर चर ध्वनियों का उपयोग करने का प्रयास करें। गैर-मौजूद चर का उपयोग करने की कोशिश कभी नहीं होनी चाहिए, अन्य भाषाओं को संकलन के समय इस पर गंजा होना चाहिए। तथ्य यह है कि PHP आपको ऐसा करने की अनुमति देता है इसका मतलब यह नहीं है कि आपको चाहिए।
ये चेतावनियाँ आपकी मदद करने के लिए हैं, आपको नाराज़ करने के लिए नहीं। यदि आपको एक चेतावनी मिलती है "आप उस चीज़ के साथ काम करने की कोशिश कर रहे हैं जो मौजूद नहीं है!" , आपकी प्रतिक्रिया "उफ़, मेरी बुरी होनी चाहिए , मुझे उस ASAP को ठीक करने दो।" और कैसे आप "चर कि बस ठीक अपरिभाषित काम" और ईमानदारी से गलत कोड है कि गंभीर त्रुटियों के लिए नेतृत्व कर सकते हैं के बीच अंतर बताने जा रहे हैं ? यही कारण है कि आप हमेशा, हमेशा , त्रुटि रिपोर्टिंग के साथ 11 में बदल जाते हैं और अपने कोड पर दूर तक प्लग लगाते रहते हैं जब तक कि एक भी नहींNOTICE
जारी किया गया है। टर्निंग एरर की रिपोर्टिंग केवल प्रोडक्शन एनवायरनमेंट के लिए है, सूचना रिसाव से बचने के लिए और बग्गी कोड के सामने भी एक बेहतर उपयोगकर्ता अनुभव प्रदान करने के लिए।
समझाने के लिए:
आपको अपने कोड में हमेशा isset
या empty
कहीं और की आवश्यकता होगी , उनकी घटना को कम करने का एकमात्र तरीका यह है कि आप अपने चर को ठीक से प्रारंभ करें। स्थिति के आधार पर ऐसा करने के विभिन्न तरीके हैं:
समारोह तर्क:
function foo ($bar, $baz = null) { ... }
इस बात की जाँच करने की कोई आवश्यकता नहीं है कि आप फ़ंक्शन के अंदर सेट हैं $bar
या नहीं $baz
, क्योंकि आपने उन्हें सेट किया है, आपको केवल इस बात की चिंता करने की आवश्यकता है कि क्या उनका मूल्य true
या false
(या जो भी हो) का मूल्यांकन करता है ।
कहीं भी नियमित चर:
$foo = null;
$bar = $baz = 'default value';
कोड के किसी खंड में अपने चरों को प्रारंभ करें जिसमें आप उनका उपयोग करने जा रहे हैं। यह !isset
समस्या को हल करता है, यह सुनिश्चित करता है कि आपके चर में हमेशा एक ज्ञात डिफ़ॉल्ट मान होता है, जिससे पाठक को यह पता चलता है कि निम्नलिखित कोड क्या काम करेगा और इस तरह से स्व-प्रलेखन का भी काम करता है।
सरणी:
$defaults = array('foo' => false, 'bar' => true, 'baz' => 'default value');
$values = array_merge($defaults, $incoming_array);
ऊपर जैसी ही बात है, आप ऐरे को डिफ़ॉल्ट मानों के साथ आरम्भ कर रहे हैं और उन्हें वास्तविक मानों के साथ अधिलेखित कर रहे हैं।
शेष मामलों में, मान लें कि आप एक ऐसा मानदंड तैयार कर रहे हैं जहां आप मानों को आउटपुट कर रहे हैं या किसी नियंत्रक द्वारा निर्धारित नहीं किया जा सकता है, आपको बस जांच करनी होगी:
<table>
<?php if (!empty($foo) && is_array($foo)) : ?>
<?php foreach ($foo as $bar) : ?>
<tr>...</tr>
<?php endforeach; ?>
<?php else : ?>
<tr><td>No Foo!</td></tr>
<?php endif; ?>
</table>
यदि आप अपने आप को नियमित रूप से उपयोग करते हुए पाते हैं array_key_exists
, तो आपको इसका मूल्यांकन करना चाहिए कि आप इसका क्या उपयोग कर रहे हैं। केवल एक बार फर्क पड़ता है यहाँ है:
$array = array('key' => null);
isset($array['key']); // false
array_key_exists('key', $array); // true
जैसा कि ऊपर कहा गया है, यदि आप अपने चर को ठीक से शुरू कर रहे हैं, तो आपको यह जांचने की आवश्यकता नहीं है कि कुंजी मौजूद है या नहीं, क्योंकि आपको पता है कि यह करता है। आप किसी बाहरी स्रोत से सरणी मिल रहे हैं, मूल्य सबसे अधिक संभावना नहीं किया जाएगा null
लेकिन ''
, 0
, '0'
, false
या यह की तरह कुछ, यानी एक मूल्य के लिए आप के साथ मूल्यांकन कर सकते हैं isset
या empty
, अपने इरादे पर निर्भर करता है। यदि आप नियमित रूप से एक सरणी कुंजी सेट करते हैं null
और चाहते हैं कि इसका अर्थ कुछ भी हो false
, लेकिन यदि उपरोक्त उदाहरण में, के भिन्न परिणाम हैं isset
और array_key_exists
आपके प्रोग्राम लॉजिक पर फर्क पड़ता है, तो आपको खुद से पूछना चाहिए कि क्यों। एक चर का अस्तित्व केवल महत्वपूर्ण नहीं होना चाहिए, केवल इसका मूल्य परिणाम होना चाहिए। यदि कुंजी एक true
/ false
ध्वज है, तो उपयोग करेंtrue
या false
नहीं null
। इसका एकमात्र अपवाद तीसरी पार्टी लाइब्रेरी होगी जो null
कुछ मतलब करना चाहती है, लेकिन चूंकि null
PHP में पता लगाने के लिए इतना कठिन है कि मुझे अभी तक ऐसा कोई भी पुस्तकालय नहीं मिला है जो ऐसा करता हो।