Manejo de Excepciones try-catch-finally en PHP


Las Excepciones se usan en PHP y la mayoria de lenguajes de programacion, sirven para controlar y personalizar los errores cuando suceden, usar un bloque de codigo para ejecutar en caso que suceda un error.

En PHP las excepciones se controlan usando la palabra reservada try , para cachar la excepcion se usa catch y si la excepcion no se encuentra en la lista de catch, se usa finally para seguir o continuar la ejecucion.

<?php
try{
	/// CODIGO A EJECUTAR
}
catch(Exception $e){
	/// RECIBIR EXCEPCIONES
    echo "Error: ".$e->getMessage();
}
finally {
	/// FINALMENTE
}
?>

Las Excepciones nos ayudan como programadores a personalizar los mensajes de error, mostrar mensajes de error para entender mejor lo que ha pasado y para ejecutar codigo que pueda resolver un error concreto antes de mostrar un error por defecto del lenguaje de programacion.

Es posible crear nuestras propias excepciones creando una clase que extienda la clase Exception.

En el siguiente ejemplo creamos 2 clases que extienden la clase Exception y cada una con su mensaje personalizado.

Se puede usar un Catch para recibir cualquier excepcion como en este caso, tambien usamos la funcion get_class para obtener la clase de Excepcion que se genera.

<?php
/// CLASE OPT1EXCEPTION
class Opt1Exception extends Exception{
	function __construct(){
		$this->message = "Error 100";
	}

}
/// CLASE OPT2EXCEPTION

class Opt2Exception extends Exception{
	function __construct(){
		$this->message = "Error 200";
	}
}

// NUESTRA FUNCION
function shoot_exception($ex){
	if($ex==1){
		throw new Opt1Exception();
	}else if($ex==2){
		throw new Opt2Exception();
	}
}


try{
	/// CODIGO A EJECUTAR
	shoot_exception(1);
}
catch(Exception $e){
	/// RECIBIR EXCEPCIONES
    echo "Error: ".$e->getMessage()." - Class: ".get_class($e);
}
finally {
	/// FINALMENTE
	echo "finalmente";
}
?>

Tambien es posible tener varios catch, cada catch debe hacer referencia a un tipo o clase diferente de excepcion.

<?php
/// CLASE OPT1EXCEPTION
class Opt1Exception extends Exception{
	function __construct(){
		$this->message = "Error 100";
	}

}
/// CLASE OPT2EXCEPTION

class Opt2Exception extends Exception{
	function __construct(){
		$this->message = "Error 200";
	}
}

// NUESTRA FUNCION
function shoot_exception($ex){
	if($ex==1){
		throw new Opt1Exception();
	}else if($ex==2){
		throw new Opt2Exception();
	}
	else if($ex==3){
		throw new Exception();
	}
}


try{
	/// CODIGO A EJECUTAR
	shoot_exception(2);
}
catch(Opt1Exception $e){
	echo "Ocurrio un error de la Opcion 1";
}
catch(Opt2Exception $e){
	echo "Ocurrio un error de la Opcion 3";
}
catch(Exception $e){
	echo "Ocurrio un error default";
}
finally {
	/// FINALMENTE
	echo "finalmente";
}
?>

Ahora ya podemos practicar e implementar Excepciones en nuestros proyectos.