Foros del Web » Programando para Internet » PHP »

problemas con try Catch

Estas en el tema de problemas con try Catch en el foro de PHP en Foros del Web. Hola a todos, les dejo el código Código PHP: function  validarArreglo ( $dato ) {          $validador = true ;         try      {         foreach( $dato  as  ...
  #1 (permalink)  
Antiguo 26/12/2010, 13:41
 
Fecha de Ingreso: diciembre-2008
Ubicación: Lima - Perú
Mensajes: 187
Antigüedad: 15 años, 4 meses
Puntos: 3
Pregunta problemas con try Catch

Hola a todos, les dejo el código

Código PHP:
function validarArreglo($dato)
{    
    
$validador=true;    
    try 
    {
        foreach(
$dato as $valor)                     
            break;        
    }
    catch(
Exception $e)
    {
        
$validador=false;
    }
    
    return 
$validador;
}

$validado=validarArreglo("cadena");
echo 
$validado
La idea es que al mandarle a la funcion una cadena como parametro se produzca un error y que la variable $validador sea "false". Pero como se darán cuenta no funciona.

He leido en internet que hay que atrapar la excepcion y he visto ejemplos que tienen que ver con la división por cero. Pero he notado que en estos ejemplos el mismo programador controla que no se produzca el error por medio de un if

algo asi
Código PHP:
if ($divisor==0) echo "division por cero" 
Entonces no he podido apreciar bien la utilidad del try, creo que al usar el if el try está demás.

Espero que me puedan ayudar, gracias.
  #2 (permalink)  
Antiguo 26/12/2010, 14:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: problemas con try Catch

y no sería mas fácil validar el dato, en lugar de usar una excepción para validar?
Código PHP:
if ( ! is_array($dato)) throw new Exception('El argumento $dato debe ser un arreglo'); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 26/12/2010, 21:21
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: problemas con try Catch

Cita:
Iniciado por pateketrueke Ver Mensaje
y no sería mas fácil validar el dato, en lugar de usar una excepción para validar?
Código PHP:
if ( ! is_array($dato)) throw new Exception('El argumento $dato debe ser un arreglo'); 
No sé qué quiere decir pero bueno...

Vamos a ver primero tienes que entender cómo funciona el bloque try {...} carch (...) {...}:

El susodicho al abrir el bloque try ejecuta todo el código que contiene como si fuera una ejecución normal, con la única diferencia de que en el momento en que dicho código lance una excepción el bloque detiene su ejecución y la envía al bloque catch más compatible, es decir, el que solicite ese tipo de clase, por ejemplo. Luego, si nunca lanzas una excepción, nunca podrás atraparla, es lógica aplastante, lo que tienes que pensar, además, es que si tú ves que algo es una excepción, no creas que va lanzar una por sí sola, la tienes que lanzar tú a menos que cambies el modo como PHP maneja los errores.

El caso, que a menos que le digas a PHP que trate los errores como excepciones o lances manualmente una excepción, el bloque catch nunca atrapará nada ya que nunca se lanzará (throw) nada.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #4 (permalink)  
Antiguo 26/12/2010, 22:50
 
Fecha de Ingreso: diciembre-2008
Ubicación: Lima - Perú
Mensajes: 187
Antigüedad: 15 años, 4 meses
Puntos: 3
Respuesta: problemas con try Catch

Hola pateketrueke, no me habia percatado de la existencia de la funcion is_array , eso me ahorra un montón de trabajo. Pero aun asi gracias jaao_death leere la seccion de control de errores en la documentación de php, sería bueno que aprenda a manejar el bloque try catch

Etiquetas: catch
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 16:10.