मैं हाल ही में कुछ कोड में आया था कि किसी भी PHP त्रुटियों को सामान्यीकृत अपवाद में बदलने के लिए कस्टम त्रुटि हैंडलर का उपयोग किया गया था। एक कस्टम अपवाद हैंडलर को भी परिभाषित किया गया था कि अगर यह एक विशेष त्रुटि कोड सीमा के भीतर था तो अपवाद लॉग करेगा। उदाहरण:अपवादों में त्रुटियों को परिवर्तित करना: डिज़ाइन दोष?
try
{
do_something();
}
catch (AppException $exception)
{
}
कौन सा अर्थ है वास्तविक प्रोग्रामिंग त्रुटियों और "असाधारण" व्यवहार के बीच कोई फर्क नहीं है:
class AppException extends Exception
{
}
function error_handler($errno, $errstr, $errfile, $errline)
{
throw new AppException($errstr, $errno);
}
function exception_handler($exception)
{
$min = ...;
$max = ...;
if ($exception->getCode() >= $min && $exception->getCode() <= $max)
{
// log exception
}
}
set_error_handler('error_handler');
set_exception_handler('exception_handler');
$a[1]; // throws exception
समस्या यह है कि मैं जैसी चीजों को देखा है।
...
function my_function($param1, $param2)
{
// do something great
}
try
{
my_function('only_one_param');
}
catch (AppException $exception)
{
}
कौन सा मुश्किल होता त्रुटियों और आवेदन के इंटरफ़ेस के डिजाइन समाप्त होता है: आगे खुदाई करने पर, मैंने कोड के कुछ हिस्सों कि विचार के आसपास जैसे कि PHP त्रुटियों का प्रतिनिधित्व किया "असाधारण" व्यवहार डिजाइन किए गए थे भर में आया था।
इस तरह की त्रुटियों को संभालने पर आपकी राय क्या है? क्या यह PHP की मूल त्रुटियों को अपवादों में बदलने लायक है? उपरोक्त स्थितियों में आप क्या करते हैं जहां इस विचार के आसपास कोडबेस बनाया गया है?
हां कि सब अच्छा लगता है, एक PHP त्रुटि विशिष्ट अपवाद को AppException बदलते क्या दिमाग में पहले आया था है। हालांकि मुझे आश्चर्य है कि इस समाधान के बीच अंतर क्या है और वास्तविक त्रुटियों के अपवादों का उपयोग किये बिना कस्टम त्रुटि हैंडलर में 500 सर्वर त्रुटि उत्पन्न करना। इसके अलावा, क्या ऐसा करने के लिए कोई ओवरहेड है? –
ठीक है, यह उपरि के बारे में नहीं है। मैं केवल अनचाहे अपवादों के लिए 500 त्रुटि पृष्ठ उत्पन्न करता हूं। अक्सर कई बार होते हैं जब मैं PHP त्रुटियों को पकड़ता हूं और प्रसंस्करण जारी रखता हूं। उदाहरण के लिए, यदि डोम डॉक्यूमेंट एक एक्सएमएल स्ट्रिंग को पार्स नहीं कर सकता है तो चेतावनी उठाएगी। इसलिए मैं उस त्रुटि को कैप्चर करता हूं, और फ़ाइल का प्रयास करने और पुनः प्रयास करने के लिए इसका उपयोग करता हूं 'try {$ dom-> loadXml ($ xml); } पकड़ो (PhpRuntimeErrorException $ ई) {$ xml = XmlCleaner :: साफ़ ($ xml); $ Dom-> loadXml ($ एक्सएमएल); } 'मैं' एक्सएमएल क्लेनर 'नहीं चलाऊंगा, क्योंकि यह वास्तव में काफी महंगा है। तो मैंने PHP त्रुटि को मुझे यह कहने के लिए कहा कि ... – ircmaxell