PHP के पुराने संस्करणों में, हम केवल अपवादों को संभाल सकते थे। त्रुटियों को संभालना संभव नहीं था। घातक त्रुटि के मामले में, यह पूर्ण एप्लिकेशन या एप्लिकेशन के कुछ हिस्से को रोक देता था। इस समस्या को दूर करने के लिए, PHP 7 ने थ्रोएबल इंटरफ़ेस को जोड़ा जो अपवादों और त्रुटियों दोनों को संभालता है।
अपवाद: जहां भी घातक और पुनर्प्राप्त करने योग्य त्रुटि होती है, PHP 7 पूरी एप्लिकेशन या स्क्रिप्ट निष्पादन को रोकने के बजाय एक अपवाद फेंकता है।
त्रुटि: PHP 7 TypeError, ArithmeticError, ParserError, और AssertionError फेंकता है, लेकिन चेतावनी और नोटिस त्रुटियां अपरिवर्तित रहती हैं। try/catch ब्लॉक का उपयोग करके, त्रुटि उदाहरण को पकड़ा जा सकता है, और अब घातक त्रुटियां एक त्रुटि उदाहरण फेंक सकती हैं। PHP 7 में, दो अपवाद शाखाओं, अपवाद और त्रुटि को थ्रोएबल लागू करने के लिए एकजुट करने के लिए एक थ्रोएबल इंटरफ़ेस जोड़ा गया है।
उदाहरण
<?php
class XYZ {
public function Hello() {
echo "class XYZ\n";
}
}
try {
$a = new XYZ();
$a->Hello();
$a = null;
$a->Hello();
}
catch (Error $e) {
echo "Error occurred". PHP_EOL;
echo $e->getMessage() . PHP_EOL ;
echo "File: " . $e->getFile() . PHP_EOL;
echo "Line: " . $e->getLine(). PHP_EOL;
}
echo "Continue the PHP code\n";
?>
आउटपुट
class XYZ Error occurred Call to a member function Hello() on null File: /home/cg/root/9008538/main.php Line: 11 Continue with the PHP code
नोट: उपरोक्त उदाहरण में, हम एक नल ऑब्जेक्ट पर एक मेथड कॉल करते हैं। कैच का उपयोग अपवाद को संभालने और फिर PHP कोड जारी रखने के लिए किया जाता है।
अंकगणितीय त्रुटि
हम अंकगणितीय त्रुटि के DivisionByZeroError का उपयोग करेंगे। लेकिन फिर भी, हमें डिवीजन ऑपरेटर पर चेतावनी त्रुटि मिलेगी।
उदाहरण: अंकगणितीय त्रुटि
<?php
$x = 10;
$y = 0;
try {
$z = intdiv($x , $y);
}
catch (DivisionByZeroError $e) {
echo "Error has occured\n";
echo $e->getMessage() . PHP_EOL ;
echo "File: " . $e->getFile() . PHP_EOL;
echo "Line: " . $e->getLine(). PHP_EOL;
}
echo "$z \n";
echo " continues with the PHP code\n";
?>
आउटपुट
Division by zero File: /home/cg/root/9008538/main.php Line: 5 continues with the PHP code
नोट: उपरोक्त प्रोग्राम में, हम intdiv() फ़ंक्शन के अंदर DivisionByZeroError को पकड़ते और रिपोर्ट करते हैं।