Foros del Web » Programando para Internet » PHP »

set_error_handler y exceptions

Estas en el tema de set_error_handler y exceptions en el foro de PHP en Foros del Web. Tengo una función que procesa un archivo de texto y otra porción de código que la llama varias veces, para procesar una lista de archivos. ...
  #1 (permalink)  
Antiguo 19/05/2006, 18:25
 
Fecha de Ingreso: abril-2006
Mensajes: 62
Antigüedad: 11 años, 7 meses
Puntos: 0
set_error_handler y exceptions

Tengo una función que procesa un archivo de texto y otra porción de código que la llama varias veces, para procesar una lista de archivos.

La función esta escrita al estilo if(!instruccion) {return false} para que los archivos de texto que generen algún error simplemente no sean procesados y se listen al final del proceso.

Hasta ahí todo bien, pero cómo no me tengo mucha confianza me gustaría que ante cualquier error que encuentre PHP dentro de la función, la aborte, es decir devuelva false y pueda seguirse con el resto de los archivos.

Bueno, no encontré una manera elegante de hacerlo. Si utilizo set_error_handler no sé como hacer para que termine la ejecución de la función.

Encontré una forma de lograr el comportamiento deseado combinando set_error_handler y exceptions de PHP5, pero parece una abominación .

Este es un ejemplo reducido de cómo quedaría para hacerlo más sencillo.
Código PHP:
<?php

function venderpescado($tipo_pescado) {
    
set_error_handler("vender_pescado_error_handler");
    
$pescados = array("atún" => 3"merluza" => 2"pejerrey" => 10);
    try {
        echo 
"Se vendió ".$pescados[$tipo_pescado] . " de $tipo_pescado\n";
    } catch (
Exception $e) {
        echo 
$e->getMessage().$tipo_pescado"\n";
    }
}

venderpescado("merluza");
//genera un error de "Undefined index" dentro de la función:
venderpescado("surubí");
venderpescado("atún");

function 
vender_pescado_error_handler($errno$errmsg) {
    throw new 
Exception("No se pudo vender el pescado ");
}
?>
Me gustaría saber si alguien conoce una mejor forma de tratar con esto.

Muchas Gracias
__________________
Guish
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:21.