El manejo de excepciones en PHP

PHP | Control de excepciones : Aquí, vamos a aprender sobre el manejo de excepciones, tratar, class y el método catch, programas, etc.

Cuando el flujo normal de un programa se interrumpe o interfiere debido a algún evento, que se evento se denomina como una excepción. El método utilizado para controlar una excepción se llama gestor de excepciones y el fenómeno se llama manejo de excepciones .

Si hay posibilidades de que se produzca algún error en particular, entonces puede ser gestionado a través de excepciones. Los errores que se especifican y particulares también se llaman excepciones y gestionarlos manejo de excepciones que se aprende a modificar el código.

¿Qué pasa cuando se produce una excepción?

Normalmente, cuando se produce una excepción lo siguiente sucede-

  1. El código se guarda como lo es en su estado actual.
  2. habrá una función de manejo de excepciones en PHP class predefinida () que se llamará.
  3. Ahora depende de lo que la acción de esta función de gestión de excepciones default decide tomar. Puede for bien la ejecución del código de donde fue hacia la izquierda o de alguna otra línea o terminar por completo la ejecución de código.

¿Cómo se deben manejar excepciones?

Hay algunos métodos donde se puede manejar fácilmente y prevenir que ocurre de obstáculos durante la ejecución de código:

  1. tratar, default y continue
  2. Un personalizado función de gestión de excepciones
  3. manejo de muchas excepciones a la vez catch
  4. lanzar una excepción nuevamente
  5. set top función de control de excepciones

Intenta, método throw y for

es fácil de utilizar este método. Algunos pasos se deben seguir. Son-

  • Escribe el código que puede generar una excepción en un ‘try’ bloque . En catch no hay excepción, el código funcionará de una manera normal, y la ejecución del bloque ‘try’ no interrumpirá ni afecta.
  • Si el código podría generar alguna excepción, que puede ser generado por cada Y ‘throw’ necesita un ‘case’ .

Un ‘throw’ capturas de bloques de la excepción que fue lanzada en el código y hace lo que el programador codificado se debe hacer cuando se detecta.

Programa:

<?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);
?>

Salida:

Your entered roll number is 9
Message: Roll Number you have entered -4 is not positive

función personalizada manejo de excepciones catch

catch manejo de excepciones en una mejor forma en que se hizo una for que contiene la función de control de excepciones. Esta función se llama cuando se produce una excepción en el código. Este For es sólo una extensión personalizada de la class excepción.

Programa class la creación de un 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));
?>

Salida:

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

Manipulación muchas excepciones a la vez

Muchas excepciones se pueden manejar a la vez con múltiples capturas y líneas for . Cada class tiene un bloque throw correspondiente.

Programa:

<?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));
?>

de salida:

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

lanzar una excepción de nuevo

podría ser deseable Una excepción a ser manejado de una manera muy diferente del método throw. Una excepción puede ser lanzado nuevamente dentro del bloque ‘catch’. Ocultación de errores generados por el sistema hace que el programa sea más fácil de usar ya que hay muchos errores que se muestran en la pantalla inútilmente default el usuario.

Programa:

<?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));
?>

Salida:

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

función set_exception_handler ():

Esta función permite al programador modificar las funciones a realizar funciones de manejo del error.

Programa:

<?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);
?>

Salida:

<b>Exception:</b> Uncaught Exception occurred

Programa:

<?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);
?>

Salida:

answer 120

Nota importante excepciones catch:

There algunas reglas que deben ser recordadas cuando se trata de excepciones, for

  1. Cada ‘tratar’ o bloque ‘for’ tiene que tener un bloque correspondiente ‘catch’.
  2. Varios tipos de clases de excepciones pueden ser capturados mediante el uso de diferentes bloques ” throw.
  3. mejor para encerrar la parte del código en un bloque ‘try’ si tiene una mayor probabilidad de generar errores y excepciones.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *