2010-05-11 9 views
5

यह php पुस्तिका से है: http://us.php.net/manual/en/language.constants.syntax.phpक्या अनिर्धारित स्थिरांक को तारों के रूप में व्याख्या करने से रोकने के लिए PHP में कोई कॉन्फ़िगरेशन विकल्प है?

आप एक अपरिभाषित निरंतर का उपयोग करते हैं, पीएचपी मानता है कि आप लगातार खुद के नाम मतलब है, बस के रूप में यदि आप इसे एक स्ट्रिंग के रूप में बुलाया (बनाम "लगातार" लगातार)। ऐसा होने पर स्तर E_NOTICE की एक त्रुटि जारी की जाएगी।

मुझे वास्तव में यह व्यवहार पसंद नहीं है। यदि मैं एक आवश्यक निरंतर परिभाषित करने में विफल रहा हूं, तो मैं स्क्रिप्ट विफल हो जाऊंगा ताकि मुझे इसे परिभाषित करने के लिए मजबूर किया जा सके। क्या PHP को स्क्रिप्ट को क्रैश करने के लिए मजबूर करने का कोई तरीका है यदि यह एक अनिर्धारित निरंतर उपयोग करने का प्रयास करता है?

उदाहरण के लिए

। इन दोनों स्क्रिप्ट एक ही काम करते हैं।

<?php 
define('DEBUG',1); 
if (DEBUG) echo('Yo!'); 
?> 

और

<?php 
if(DEBUG) echo('Yo!'); 
?> 

मैं करूंगा बल्कि दूसरे पटकथा मर जाते हैं और घोषणा करता हूं कि यह एक अपरिभाषित निरंतर डीबग का उपयोग करने की कोशिश की।

उत्तर

3

छद्म कोड:

/** 
* A Notice becomes an Error :) 
*/ 
function myErrorHandler($errno, $errstr, $errfile, $errline) { 
    if ($errno == E_NOTICE) { // = 8 
     if (substr($errstr ...)) { // contains something which looks like a constant notice... 
      trigger_error('A constant was not defined!', E_USER_ERROR); 
     } 
    } 
} 
set_error_handler("myErrorHandler"); 
012 तुम कुछ (बदसूरत) इस तरह कर सकता है
+0

एक अपरिभाषित निरंतर उपयोग करने के लिए त्रुटि कोड 8. – Tgr

+0

धन्यवाद Tgr! मैंने PHP स्थिरांक को E_USER_NOTICE में बदल दिया। – powtac

+0

+1 - मेरा से बेहतर जवाब। शायद इस त्रुटि को केवल तब सेट करने के लिए एक अच्छा विचार है जब डिबगिंग हो, क्योंकि यह एक सबस्ट्रिंग चेक पर निर्भर करता है जो धीमा हो सकता है (और कुछ झूठी सकारात्मक दे सकता है)। – Geoff

1
if(!defined('DEBUG')) die('failed.'); 
+0

मैं वह एक E_ERROR बढ़ाने के लिए ... –

+0

मैं जानता हूँ कि मैं ऐसा कर सकता है चेतावनी चाहता है, लेकिन मैं के लिए उम्मीद की गई थी एक और सुरुचिपूर्ण समाधान। @ बाय्रॉन हां, मैं PHP को घोषित करना चाहता हूं और E_NOTICE – mrbinky3000

1

मैं वहाँ त्रुटि का प्रकार फेंक दिया बदलने के लिए एक रास्ता है नहीं लगता है, लेकिन आप error_reporting का उपयोग कर E_ALL के लिए रिपोर्टिंग त्रुटि को बदल सकते हैं, ताकि आप इन त्रुटियों को देखने, जबकि विकासशील:

error_reporting(E_ALL); 
+0

की बजाय E_ERROR चाहता हूं लेकिन इसके साथ एक नोटिस एक नोटिस बनी हुई है! – powtac

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