Exception Handling in PHP - GeeksforGeeks

31 Oct, 2018
An exception is unexpected program result that can be handled by the program itself. Exception Handling in PHP is almost similar to exception handling in all programming languages.PHP provides following specialized keywords for this purpose.
try: It represent block of code in which exception can arise.
catch: It represent block of code that will be executed when a particular exception has been thrown.
throw: It is used to throw an exception. It is also used to list the exceptions that a function throws, but doesn’t handle itself.
finally: It is used in place of catch block or after catch block basically it is put for cleanup activity in PHP code.
Why Exception Handling in PHP ?Following are the main advantages of exception handling over error handling
Separation of error handling code from normal code: In traditional error handling code there is always if else block to handle errors. These conditions and code to handle errors got mixed so that becomes unreadable. With try Catch block code becomes readable.
Grouping of error types: In PHP both basic types and objects can be thrown as exception. It can create a hierarchy of exception objects, group exceptions in namespaces or classes, categorize them according to types.
Exception handling in PHP:
Following code explains the flow of normal try catch block in PHP:<?php  // PHP Program to illustrate normal// try catch block codefunction demo($var) {    echo " Before try block";    try {        echo "\n Inside try block";                      // If var is zero then only if will be executed        if($var == 0)        {                              // If var is zero then only exception is thrown            throw new Exception('Number is zero.');                              // This line will never be executed            echo "\n After throw (It will never be executed)";        }    }              // Catch block will be executed only     // When Exception has been thrown by try block    catch(Exception $e) {            echo "\n Exception Caught", $e->getMessage();        }                  // This line will be executed whether        // Exception has been thrown or not         echo "\n After catch (will be always executed)";}  // Exception will not be riseddemo(5);  // Exception will be rised heredemo(0);?>Output: Before try block
 Inside try block
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 After catch (will be always executed)

<?php  // PHP Program to illustrate normal// try catch block codefunction demo($var) {    echo " Before try block";    try {        echo "\n Inside try block";                      // If var is zero then only if will be executed        if($var == 0)        {                              // If var is zero then only exception is thrown            throw new Exception('Number is zero.');                              // This line will never be executed            echo "\n After throw (It will never be executed)";        }    }              // Catch block will be executed only     // When Exception has been thrown by try block    catch(Exception $e) {            echo "\n Exception Caught", $e->getMessage();        }                  // This line will be executed whether        // Exception has been thrown or not         echo "\n After catch (will be always executed)";}  // Exception will not be riseddemo(5);  // Exception will be rised heredemo(0);?>
 Before try block
 Inside try block
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 After catch (will be always executed)

Following code explains the flow of normal try catch and finally block in PHP<?php  // PHP Program to illustrate normal// try catch block codefunction demo($var) {          echo " Before try block";    try {        echo "\n Inside try block";                      // If var is zerothen only if will be executed        if($var == 0) {                              // If var is zero then only exception is thrown            throw new Exception('Number is zero.');                              // This line will never be executed            echo "\n After throw it will never be executed";        }    }              // Catch block will be executed only     // When Exception has been thrown by try block    catch(Exception $e) {        echo "\n Exception Caught" . $e->getMessage();    }    finally {        echo "\n Here cleanup activity will be done";    }              // This line will be executed whether    // Exception has been thrown or not     echo "\n After catch it will be always executed";}  // Exception will not be riseddemo(5);  // Exception will be rised heredemo(0);?>Output: Before try block
 Inside try block
 Here cleanup activity will be done
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 Here cleanup activity will be done
 After catch (will be always executed)

<?php  // PHP Program to illustrate normal// try catch block codefunction demo($var) {          echo " Before try block";    try {        echo "\n Inside try block";                      // If var is zerothen only if will be executed        if($var == 0) {                              // If var is zero then only exception is thrown            throw new Exception('Number is zero.');                              // This line will never be executed            echo "\n After throw it will never be executed";        }    }              // Catch block will be executed only     // When Exception has been thrown by try block    catch(Exception $e) {        echo "\n Exception Caught" . $e->getMessage();    }    finally {        echo "\n Here cleanup activity will be done";    }              // This line will be executed whether    // Exception has been thrown or not     echo "\n After catch it will be always executed";}  // Exception will not be riseddemo(5);  // Exception will be rised heredemo(0);?>
 Before try block
 Inside try block
 Here cleanup activity will be done
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 Here cleanup activity will be done
 After catch (will be always executed)

Using Custom Exception Class<?phpclass myException extends Exception {    function get_Message() {                  // Error message        $errorMsg = 'Error on line '.$this->getLine().                    ' in '.$this->getFile()        .$this->getMessage().' is number zero';        return $errorMsg;    }}  function demo($a) {    try {              // Check if        if($a == 0) {            throw new myException($a);        }    }          catch (myException $e) {              // Display custom message        echo $e->get_Message();    }}  // This will not generate any exceptiondemo(5);  // It will cause an exceptiondemo(0);?> Output:Error on line 20 in /home/45ae8dc582d50df2790517e912980806.php0 is number zero

<?phpclass myException extends Exception {    function get_Message() {                  // Error message        $errorMsg = 'Error on line '.$this->getLine().                    ' in '.$this->getFile()        .$this->getMessage().' is number zero';        return $errorMsg;    }}  function demo($a) {    try {              // Check if        if($a == 0) {            throw new myException($a);        }    }          catch (myException $e) {              // Display custom message        echo $e->get_Message();    }}  // This will not generate any exceptiondemo(5);  // It will cause an exceptiondemo(0);?> 
Error on line 20 in /home/45ae8dc582d50df2790517e912980806.php0 is number zero

Set a Top Level Exception Handler: The set_exception_handler() function set all user defined function to all uncaught exception.<?php  // PHP Program to illustrate normal// try catch block code  // Function for Uncaught Exceptionfunction myException($exception) {          // Details of Uncaught Exception    echo "\nException: " . $exception->getMessage();}  // Set Uncaught Exception handlerset_exception_handler('myException');function demo($var) {          echo " Before try block";    try {        echo "\n Inside try block";                      // If var is zero then only if will be executed        if($var == 0)        {                              // If var is zero then only exception is thrown            throw new Exception('Number is zero.');                              // This line will never be executed            echo "\n After throw (it will never be executed)";        }    }              // Catch block will be executed only     // When Exception has been thrown by try block    catch(Exception $e) {        echo "\n Exception Caught", $e->getMessage();    }              // This line will be executed whether    // Exception has been thrown or not     echo "\n After catch (will be always executed)";              if($var < 0) {                   // Uncaught Exception        throw new Exception('Uncaught Exception occurred');    }}  // Exception will not be riseddemo(5);  // Exception will be rised heredemo(0);  // Uncaught Exceptiondemo (-3);?>Output: Before try block
 Inside try block
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 After catch (will be always executed)
 Before try block
 Inside try block
 After catch (will be always executed)
 Exception: Uncaught Exception occurred

<?php  // PHP Program to illustrate normal// try catch block code  // Function for Uncaught Exceptionfunction myException($exception) {          // Details of Uncaught Exception    echo "\nException: " . $exception->getMessage();}  // Set Uncaught Exception handlerset_exception_handler('myException');function demo($var) {          echo " Before try block";    try {        echo "\n Inside try block";                      // If var is zero then only if will be executed        if($var == 0)        {                              // If var is zero then only exception is thrown            throw new Exception('Number is zero.');                              // This line will never be executed            echo "\n After throw (it will never be executed)";        }    }              // Catch block will be executed only     // When Exception has been thrown by try block    catch(Exception $e) {        echo "\n Exception Caught", $e->getMessage();    }              // This line will be executed whether    // Exception has been thrown or not     echo "\n After catch (will be always executed)";              if($var < 0) {                   // Uncaught Exception        throw new Exception('Uncaught Exception occurred');    }}  // Exception will not be riseddemo(5);  // Exception will be rised heredemo(0);  // Uncaught Exceptiondemo (-3);?>
 Before try block
 Inside try block
 After catch (will be always executed)
 Before try block
 Inside try block
 Exception CaughtNumber is zero.
 After catch (will be always executed)
 Before try block
 Inside try block
 After catch (will be always executed)
 Exception: Uncaught Exception occurred

PHP
PHP Programs
Web Technologies
PHP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
How to Insert Form Data into Database using PHP ?
How to execute PHP code using command line ?
How to pop an alert message box using PHP ?
PHP in_array() Function
How to convert array to string in PHP ?
How to Insert Form Data into Database using PHP ?
How to execute PHP code using command line ?
How to pop an alert message box using PHP ?
How to convert array to string in PHP ?
How to delete an array element based on key in PHP?