Home »
PHP
PHP Exception Handling
PHP | Exception Handling: Here, we are going to learn about the exception handling, try, catch and throw method, programs, etc.
By Sayesha Singh Last updated : November 27, 2023
Exception Handling
When a program's normal flow is interrupted or interfered due to some event, that event is termed as an exception. The method used to handle an exception is called exception handler and the phenomenon is called exception handling.
If there are chances of some particular error occurring, then it can be managed through exceptions. The errors which are specified and particular are also called exceptions and to manage them exception handling is learned to modify the code.
What happens when an exception occurs?
Normally when an exception occurs the following thing happens-
- The code is saved as it is in its present state.
- There will be a predefined(default) function for handling exceptions in PHP which will be called.
- It now depends on what action this default exception handler function decides to take. It can either continue the execution of the code from where it was left or from some other line or completely terminate the code execution.
How should exceptions be handled in PHP?
There are some methods where one can easily handle and prevent occurring of hurdles while running code:
- try, catch, and throw
- A customized function for handling exceptions
- handling many exceptions at a time
- throwing an exception again
- set top exception handling function
Try, catch and throw method
It is easy to use this method. Some steps need to be followed. They are-
- Write the code which can generate an exception in a try block. In case there is no exception, the code will work in a normal fashion, and the execution of try block will not interrupt or affect.
- If the code might generate some exception, it can be generated by and every throw needs a catch.
- A catch block catches the exception which was thrown in the code and does what the programmer coded should be done when it is caught.
Example
<?php
//creating a function with an exception
function enter($roll_no)
{
try {
// Check if
if ($roll_no < 0) {
throw new Exception(
"Roll Number you have entered " .
$roll_no .
" is not positive \n"
);
}
} catch (Exception $e) {
echo "Message: " . $e->getMessage();
exit(0);
}
echo "Your entered roll number is " . $roll_no . "\n";
}
enter(9);
enter(-4);
?>
Output:
Your entered roll number is 9
Message: Roll Number you have entered -4 is not positive
Customized function for handling exceptions
For handling exceptions in a better way a class is made containing the exception handling function. This function will be called when an exception occurs in the code. This class is just a customized extension of the Exception class.
Example
Program for creating a class.
<?php
class ex extends Exception
{
function Message()
{
// Error message
$Msg =
"The code had an attempt to divide a number by zero error on line no " .
$this->getLine() .
"\n" .
"Hence the number is now divided by 1 rather than 0" .
"\n";
return $Msg;
}
}
function divide($a, $b)
{
try {
// Check if divisor is 0
if ($b == 0) {
throw new ex($b);
}
} catch (ex $e) {
// Display custom message
echo $e->Message();
//Take an appropriate action for the error...more than
// just printing a message
$b = 1;
}
//returns valid value by rectifying errors if caught
return $a / $b;
}
// This will not generate any exception
echo "When the 15 is divided by 3 the result is ";
echo divide(15, 3) . "\n";
echo "When the 4 is divided by 0 the result is \n";
// It will cause an exception
echo divide(4, 0);
?>
Output:
When the 15 is divided by 3 the result is 5
When the 4 is divided by 0 the result is
The code had an attempt to divide a number by zero error on line no 17
Hence the number is now divided by 1 rather than 0
4
Handling many exceptions at a time
Many exceptions can be handled at a time with multiple catches and throw lines. Each throw has a corresponding catch block.
Example
<?php
class ex extends Exception
{
function Message()
{
// Error message
$Msg =
"The code had an attempt to divide a number by zero error on line no " .
$this->getLine() .
"\n" .
"Hence the number is now divided by 1 rather than 0" .
"\n";
return $Msg;
}
}
class ex1 extends Exception
{
function Message1()
{
// Error message
$Msg1 =
"The code had an attempt to divide a number by negative number on line no " .
$this->getLine() .
"\n" .
"Hence the number is now divided by modulus of the divisor" .
"\n";
return $Msg1;
}
}
function jsm($a, $b)
{
try {
// Check if
if ($b == 0) {
throw new ex($b);
}
if ($b < 0) {
throw new ex1($b);
}
} catch (ex $e) {
// Display custom message
echo $e->Message();
$b = 1;
} catch (ex1 $e) {
// Display custom message
echo $e->Message1();
// taking action
$b = -$b;
}
return $a / $b;
}
// This will not generate any exception
echo "When the 15 is divided by -3 the result is \n";
echo jsm(15, -3) . "\n";
echo "When the 4 is divided by 0 the result is \n";
// It will cause an exception
echo jsm(4, 0);
?>
Output:
The code had an attempt to divide a number by negative number on line no 31
Hence the number is now divided by modulus of the divisor
5
When the 4 is divided by 0 the result is
The code had an attempt to divide a number by zero error on line no 27
Hence the number is now divided by 1 rather than 0
4
Throwing an exception again
An exception might be desired to be handled in a very different manner from the default method. An exception can be thrown again inside the catch block. Hiding errors generated by the system makes the program more user friendly as there are many errors that are uselessly displayed on the screen for the user.
Example
<?php
class ex extends Exception
{
function Message()
{
// Error message
$Msg =
"The code had an attempt to divide a number by zero error on line no " .
$this->getLine() .
"\n" .
"Hence the number is now divided by 1 rather than 0" .
"\n";
return $Msg;
}
}
$dividend = 20;
$divisor = 0;
try {
try {
if ($divisor == 0) {
throw new Exception($divisor);
}
} catch (Exception $e) {
echo "\nChanging 0 divisor to 1 \n";
$divisor = 1;
throw new ex($divisor);
}
} catch (ex $e) {
echo $e->Message();
}
echo "\n Quotient " . $dividend / $divisor;
?>
Output:
Changing 0 divisor to 1
The code had an attempt to divide a number by zero error on line no 21
Hence the number is now divided by 1 rather than 0
Quotient 20
Set_exception_handler() function
This function lets the programmer modify functions to make the error handling functions.
Example 1
<?php
function ex($exception)
{
echo "<b>Exception:</b> " . $exception->getMessage();
}
set_exception_handler("ex");
$no = 0;
$factorial = 1;
//Since no=0 then if block will be executed
if ($no == 0) {
// any line of the code after throw new exception doesn't
//work and code ends
throw new Exception("Uncaught Exception occurred");
}
for ($i = $no; $i > 0; $i--) {
$factorial = $factorial * $i;
}
echo "answer " . $factorial;
?>
Output:
<b>Exception:</b> Uncaught Exception occurred
Example 2
<?php
function ex($exception)
{
echo "<b>Exception:</b> " . $exception->getMessage();
}
set_exception_handler("ex");
$no = 5;
$factorial = 1;
//if is false and not executed
if ($no == 0) {
throw new Exception("Uncaught Exception occurred");
}
for ($i = $no; $i > 0; $i--) {
$factorial = $factorial * $i;
}
echo "answer " . $factorial;
?>
Output:
answer 120
Important note for exceptions
There are some rules that should be remembered when trying to catch exceptions-
- Each try or throw block has to have a corresponding catch block.
- Various types of classes of exceptions can be caught by using different catch blocks.
- Better to enclose the part of the code in a try block if it has a more probability of generating errors and exceptions.