यह वास्तव में आसान है, लेकिन मैं अंत में E_NOTICE
त्रुटि मैं चाहता था पकड़ने में सफल नहीं था। मैं वर्तमान error_handler
ओवरराइड करने के लिए एक अपवाद है कि मैं एक try{}
बयान में पकड़ेगा फेंक की जरूरत है।
function testGotUndefinedIndex() {
// Overriding the error handler
function errorHandlerCatchUndefinedIndex($errno, $errstr, $errfile, $errline) {
// We are only interested in one kind of error
if ($errstr=='Undefined index: bar') {
//We throw an exception that will be catched in the test
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
return false;
}
set_error_handler("errorHandlerCatchUndefinedIndex");
try {
// triggering the error
$foo = array();
echo $foo['bar'];
} catch (ErrorException $e) {
// Very important : restoring the previous error handler
restore_error_handler();
// Manually asserting that the test fails
$this->fail();
return;
}
// Very important : restoring the previous error handler
restore_error_handler();
// Manually asserting that the test succeed
$this->pass();
}
यह त्रुटि हैंडलर redeclare करने के लिए बस इसे पकड़ने के लिए एक अपवाद फेंक करने के लिए एक छोटे से बहुत ज्यादा जटिल लगता है। जब कोई अपवाद कैच हो गया था और कोई त्रुटि नहीं हुई, तो अन्य हार्ड पार्ट त्रुटि_handler को सही ढंग से पुनर्स्थापित कर रहा था, अन्यथा यह केवल SimpleTest त्रुटि हैंडलिंग के साथ गड़बड़ करता है।
कितनी भयानक भाषा है! – m93a
यदि आप set_error_handler पर दूसरे पैरामीटर के रूप में E_NOTICE प्रदान करते हैं तो यह केवल नोटिस को संभालेगा। "_error_handler_ फ़ंक्शन की ट्रिगरिंग को मास्क करने के लिए इस्तेमाल किया जा सकता है जैसे त्रुटि_ रिपोर्टिंग इन सेटिंग सेटिंग जो त्रुटियां दिखायी जाती हैं। इस मुखौटा के बिना त्रुटि_ रिपोर्टिंग सेटिंग की सेटिंग के बावजूद _error_handler_ को हर त्रुटि के लिए बुलाया जाएगा।" – nick