मैं इस कोशिश की। विभिन्न प्रकार की त्रुटियों के लिए मेरे पास अलग-अलग त्रुटि हैंडलर कैसे हैं?आप PHP में एकाधिक त्रुटि हैंडलर कैसे प्राप्त करते हैं?</p> <pre><code>set_error_handler('ReportError', E_NOTICE | E_USER_NOTICE); set_error_handler('ErrorHandler', E_ALL & ~(E_NOTICE | E_USER_NOTICE)); </code></pre> <p>लेकिन केवल एक दूसरे के काम करता है:
उत्तर
क्यों एक त्रुटि हैंडलर नहीं है और हैंडलर में त्रुटि प्रकार से फ़िल्टर करें और वहां से अलग-अलग फ़ंक्शंस कॉल करें? एक GenericErrorHandler()
बनाने और उस में ऐसा करते हैं:
switch($errno){
case E_USER_ERROR: UserErrorHandler(...); break;
}
आप एक त्रुटि हैंडलर है और इस तरह त्रुटियों संभाल कर सकते हैं (ठीक है, यह पीएचपी 5.3 है, लेकिन मुझे क्षमा करें - मामूली संशोधनों और यह सामान्य रूप से काम करेंगे)
set_error_handler(function($errno, $errstr, $errfile, $errline)
{
switch($errno)
{
case E_ERROR:
{
# Bla bla bla, your code here
return true;
}
}
return false;
});
यदि आपको वास्तव में दो अलग set_error_handler का उपयोग करना होगा, तो आप पिछले त्रुटि हैंडलर प्राप्त करने के लिए फ़ंक्शन कॉल का उपयोग कर सकते हैं। और फिर भी, आप खो देंगे कि आप किस त्रुटि के लिए फ़िल्टर कर रहे हैं।
इस तरह के नियंत्रक होने के बावजूद यह और अधिक सुरुचिपूर्ण है।
तो, वेस्टी क्या कह रहा है, इस पर ध्यान देने के लिए, महत्वपूर्ण हिस्सा यह है कि आप केवल एक त्रुटि हैंडलर प्राप्त कर सकते हैं, और set_error_handler() फ़ंक्शन पहले परिभाषित त्रुटि हैंडलर देता है, या शून्य अगर कोई भी परिभाषित नहीं किया जाता है। तो आपके त्रुटि हैंडलर में, संभावित रूप से उस वर्ग का उपयोग करें जो इसे पंजीकृत करते समय पिछली त्रुटि हैंडलर को संग्रहीत करता है, ताकि जब आप अपनी कक्षा विधि के साथ त्रुटियों को संभाल लें, तो पिछले त्रुटि हैंडलर को भी कॉल करें। काला कौआ-php संतरी ग्राहक से एक अंश:
public function registerErrorHandler($call_existing_error_handler = true, $error_types = -1)
{
$this->error_types = $error_types;
$this->old_error_handler = set_error_handler(array($this, 'handleError'), error_reporting());
$this->call_existing_error_handler = $call_existing_error_handler;
}
और फिर संभाल त्रुटि विधि:
public function handleError($code, $message, $file = '', $line = 0, $context=array())
{
if ($this->error_types & $code & error_reporting()) {
$e = new ErrorException($message, 0, $code, $file, $line);
$this->handleException($e, true, $context);
}
if ($this->call_existing_error_handler && $this->old_error_handler) {
call_user_func($this->old_error_handler, $code, $message, $file, $line, $context);
}
}
कृपया ध्यान दें कि यह मान लिया गया है> = पीएचपी 5.4 – thorne51