रुचि रखने वालों के लिए, मैंने इस विषय को एक छोटे से लेख में विस्तारित किया है, जो कुछ हद तक बेहतर संरचित रूप में नीचे दी गई जानकारी प्रदान करता है: 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कुछ मतलब करना चाहती है, लेकिन चूंकि nullPHP में पता लगाने के लिए इतना कठिन है कि मुझे अभी तक ऐसा कोई भी पुस्तकालय नहीं मिला है जो ऐसा करता हो।