2010-07-07 22 views
54

स्वत: परिवर्तनीय घोषणा के साथ अन्य भाषाओं - जैसे पर्ल - एक सख्त मोड है।PHP में सख्त मोड?

इस सख्त मोड को सक्रिय करके, परिवर्तनीय घोषणा की आवश्यकता है, और जैसे ही आप एक अविकसित चर का उपयोग करने का प्रयास करते हैं, पर्ल एक त्रुटि फेंकता है।

क्या PHP कोई समान सुविधा प्रदान करता है?

+1

के बाद से संस्करण 7 [पीएचपी सख्त मोड का समर्थन करता है] (http://php.net/manual/en/migration70.new-features.php), बस प्रतीक्षा 'घोषित (strict_types = 1); नामस्थान घोषणा से पहले, प्रत्येक (और प्रत्येक) स्क्रिप्ट फ़ाइल के शीर्ष पर। – Code4R7

+0

@ कोड 4 आर 7 यह एक अलग प्रकार का सख्त मोड है, फिर किसी ने सवाल में पूछा। – Flimm

+0

सच है। 'Error_reporting (E_STRICT) पर वापस लौटें;'। – Code4R7

उत्तर

60

का प्रकार। आप अपने error reporting में E_NOTICE स्तर को सक्रिय कर सकते हैं। (स्थिरांक here की सूची।)

एक अविकसित चर के उपयोग के हर उदाहरण E_NOTICE फेंक देगा।

E_STRICT त्रुटि आजीवण उन नोटिस को भी फेंक देगा, साथ ही आपके कोड को अनुकूलित करने के तरीके के बारे में अन्य संकेत भी देगा।

error_reporting(E_STRICT); 

स्क्रिप्ट

समाप्त तुम सच में गंभीर हैं, और को अपनी स्क्रिप्ट समाप्त बजाय सिर्फ जब एक अघोषित चर का सामना कर एक नोटिस outputting, आप एक custom error handler बना सकते हैं की चाहते हैं।

कार्य उदाहरण है कि उन्हें में केवल "अपरिभाषित चर" के साथ नोटिस संभालती है और डिफ़ॉल्ट पीएचपी त्रुटि हैंडलर के लिए पर सब कुछ गुजरता है:

<?php 

error_reporting(E_STRICT); 

function terminate_missing_variables($errno, $errstr, $errfile, $errline) 
{        
    if (($errno == E_NOTICE) and (strstr($errstr, "Undefined variable"))) 
    die ("$errstr in $errfile line $errline"); 

    return false; // Let the PHP error handler handle all the rest 
} 

$old_error_handler = set_error_handler("terminate_missing_variables"); 

echo $test; // Will throw custom error 

xxxx(); // Will throw standard PHP error 

?> 
+0

हां यह एक तरह का है लेकिन पूरी तरह से अन्य सख्त प्रकार की भाषाओं की तरह नहीं है। – Sarfraz

+1

@ एसएसी यूप, अन्य चीजें हैं जो नोटिस के रूप में आउटपुट हैं, इसलिए जब आप इसे चालू करते हैं तो वे भी साथ आएंगे। (और जाहिर है, यह दृढ़ता से टाइप की गई भाषा में उतना सख्त नहीं है।) –

+0

धन्यवाद आपका कोड उत्कृष्ट काम करता है! आउटपुट को ज़ेंड त्रुटि ट्रेस व्यू पर रीडायरेक्ट करने के लिए मैंने 'die' को 'throw' में बदल दिया। – jantimon

3

हां, अपनी स्क्रिप्ट की शुरुआत में error_reporting(E_STRICT|E_ALL); टाइप करें।

+0

केवल पहले PHP 5.4.0, आपको स्पष्ट रूप से 'E_STRICT' की आवश्यकता है। Http://php.net/manual/en/function.error-reporting.php देखें जहां 'E_STRICT' 5.4.0 के बाद से 'E_ALL' का हिस्सा बन गया। – Roland

1

पीएचपी है डिफ़ॉल्ट रूप से अघोषित चर के बारे में चेतावनी, तुम बस जरूरत है error reporting स्तर को चालू करने के लिए ताकि आप नोटिस देखेंगे। ध्यान दें कि चूंकि PHP में एक चर घोषित करने के लिए कोई विशेष वाक्यविन्यास नहीं है और आप इसे निर्दिष्ट करके एक घोषित करते हैं, तो यह केवल तभी आपको चेतावनी दे सकता है जब आप को किसी अविकसित चर के मान का उपयोग करते हैं। अन्य भाषाओं के विपरीत, "अविकसित चर के लिए असाइनमेंट" मौजूद नहीं है, इसलिए PHP आपको चेतावनी नहीं दे सकता है।

1

उपयोग

error_reporting(E_ALL); 

अपने PHP कोड की शुरुआत में। या अपने php.ini फ़ाइल में error_reporting सेटिंग सेट, सभी PHP फ़ाइलों

2

आप error_reporting जाँच कर सकते हैं, और भूल नहीं है display_errors स्थापित करने के लिए और साथ ही के लिए यह निर्धारित करने के लिए। नोट, कि त्रुटि रिपोर्टिंग के कई स्तर हैं।

35

उपयोग

error_reporting(-1); 

हर संभव त्रुटि को दिखाने के लिए, और यहां तक ​​कि E_STRICT सहित जब नए स्तरों और स्थिरांक भविष्य पीएचपी संस्करणों में जुड़ जाते हैं।

(Reference)

+5

+1 उस -1 चीज़ और भविष्य की संगतता के लिए कई फ़ाइलों में बिखराया जा सकता है। – Sarfraz

+1

यह आश्चर्यजनक है, धन्यवाद! –

+1

त्रुटि_ रिपोर्टिंग (-1) त्रुटि_reporting (E_STRICT) के समान है? – Pacerier

1

आप set_error_handler() के साथ अपने स्वयं त्रुटि हैंडलिंग समारोह लागू कर सकते हैं।

फिर आप चाहें तो कुछ त्रुटि स्तरों पर प्रतिक्रिया दे सकते हैं।

उदाहरण के लिए, केवल एक त्रुटि संदेश दिखाने और लॉगिंग करने के बजाय, यदि आप एक चर को ठीक से घोषित नहीं किया गया है या यदि कोई शर्त पूरी हो जाती है तो आप स्क्रिप्ट को समाप्त कर सकते हैं।

इस तरह आप अपने PHP दुभाषिया उदाहरण पर चलने वाले किसी भी कोड के लिए एक बहुत सख्त नीति लागू कर सकते हैं।

0

मैं सुझाव दूंगा कि रिपोर्टिंग और हैंडलिंग त्रुटियों के लिए आवश्यकताएं आपके विकास पर्यावरण और आपके लाइव उत्पादन पर्यावरण (डब्ल्यूडब्ल्यूडब्लू, कंपनी इंट्रानेट इत्यादि) के भीतर भिन्न हैं। विकास के दौरान आप समस्याओं को खोजने और ठीक करने के लिए जितना संभव हो उतना विस्तार देखना चाहेंगे।

लाइव वातावरण में, मुझे नहीं लगता कि आप उपयोगकर्ताओं को PHP त्रुटि संदेश दिखाना चाहते हैं, बल्कि स्क्रिप्ट को कम कार्यक्षमता के साथ जारी रखने की अनुमति दें (उदाहरण के लिए एक संदेश जैसे "क्षमा करें हम आपकी प्रोफ़ाइल को अपडेट नहीं कर सकते पल ", या उपयोगकर्ता को होम पेज पर रीडायरेक्ट करें, आदि)। इसे प्राप्त करने का एक तरीका प्रत्येक पर्यावरण के लिए कस्टम त्रुटि हैंडलर के उपयोग के माध्यम से होगा

+0

मैंने अपने परीक्षण/विकास चरणों में पेककास कोड लागू किया। – jantimon

संबंधित मुद्दे