PHP 7 Exception Handling

Exception provides a unified mechanism for handling errors in an extensible, maintainable and object oriented way. In exception handling, code is executed inside try catch code. The code is enclosed within a try block, to facilitate the catching of prospective exceptions. If something goes wrong inside the try block, you can then throw the exception and your code will then catch the exception and respond accordingly.

Syntax

try {
	//Throw an exception
	throw new exception('message', code);
} catch(exception) {
	// handle exception
}

Example

<?php
try { 
	throw new Exception('An error has occured', 42);
}
catch(Exception $e)
{
	echo 'Exception '.$e->getCode().', '.$e->getMessage().
		 ' in filename '.$e->getFile().' on line number '.$e->getLine();
}
?>		 

The throw keyword triggers the exception handling mechanism. Each try block of your code need atleast one catch block. A single try block can have more than one catch block to catch different types of exceptions.

Example

<?php
try { 
	throw new Exception('An error has occured', 42);
}
catch(Exception1 $e)
{
	echo 'Exception '.$e->getCode().', '.$e->getMessage().
		 ' in filename '.$e->getFile().' on line number '.$e->getLine();
}
catch(Exception2 $e)
{
	echo 'Exception '.$e->getCode().', '.$e->getMessage().
		 ' in filename '.$e->getFile().' on line number '.$e->getLine();
}
?>		 




Exception Class

Exception class has following built in methods.

Name Returns
getCode() returns code of exception
getMessage() returns message of exception
getFile() returns full path of the source file where the exception was raised
getLine() returns the line number in the code where the exception was raised
getTrace() returns an array of the backtrace where the exception was raised
getTraceAsString() returns information in formatted string of trace

User defined Exception

We can define our own exception class. For this, we need to extend the Exception class.

Example

<?php
class customException extends Exception {
	public function msg(){
		$msg = 'Wrong Answer';
		return $msg;
	}
}
$ans = 4;
try { 
	if($userinput != $ans) {
		throw new customException('An error has occured', 42);
	}
}
catch(customException $e)
{
	echo 'Exception '.$e->getMessage();
}
?>		 




Finally block

The code within finally block will always be executed after the try catch block.

Example

<?php
try { 
	throw new Exception('An error has occured', 42);
}
catch(Exception $e)
{
	echo 'Exception '.$e->getCode().', '.$e->getMessage().
		 ' in filename '.$e->getFile().' on line number '.$e->getLine();
}
finally {
	echo 'This block is always executable.';
}
?>		 

set_exception_handler() function

The set_exception_handler() function is used to set the user defined exception handler function. The script stops execution after this function is called.

function setException() {
	try { 
	throw new Exception('An error has occured', 42);
	}
	catch(Exception $e)
	{
		echo 'Exception '.$e->getCode().', '.$e->getMessage().
			 ' in filename '.$e->getFile().' on line number '.$e->getLine();
	}
}
set_exception_handler(setException);

restore_exception_handler() function

It is used to restore the previous exception handler after changing it through set_exception_handler() function.

function setException() {
	try { 
	throw new Exception('An error has occured', 42);
	}
	catch(Exception $e)
	{
		echo 'Exception '.$e->getCode().', '.$e->getMessage().
			 ' in filename '.$e->getFile().' on line number '.$e->getLine();
	}
}
set_exception_handler(setException);
restore_exception_handler()