Foros del Web » Programando para Internet » PHP »

Duda con try catch

Estas en el tema de Duda con try catch en el foro de PHP en Foros del Web. hola tengo una duda con esto , estoy haciendo el control de errores para mis clases pero tengo una duda si tengo una clase A ...
  #1 (permalink)  
Antiguo 13/05/2011, 13:50
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Duda con try catch

hola tengo una duda con esto , estoy haciendo el control de errores para mis clases pero tengo una duda si tengo una clase A que tiene 1,2,3 metodos y en el metodo 1 tego algo asi


try{
2();
}catch(){
error_log(Ha ocurrido un error);
}

si en dado caso que en el metodo 2 ocurrar un errro el try que esta en el metodo 1 lo atraparia?


saludos
  #2 (permalink)  
Antiguo 13/05/2011, 13:57
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Duda con try catch

Bueno, try/catch no sirve para capturar errores.

Sirve para capturar excepciones, así que lo que debes hacer es controlar tu código, para evitar errores, y en caso de saber que algo está mal entonces lanzas una excepción.

Como puedes reflexionar no son lo mismo, y por lo tanto no debes usarlo bajo ese concepto que tienes.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/05/2011, 13:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con try catch

Sí, las excepciones son atrapadas en el primer catch que tenga declarado el tipo de excepción, es por eso que puedes declarar diferentes tipos de excepciones, para que las excepciones que no quieres manejar "suban" en la llamada como una burbuja.

Saludos.
  #4 (permalink)  
Antiguo 13/05/2011, 13:59
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Duda con try catch

pues solo captura lo que tienes dentro del bloque try
o quizá no entendí bien el problema podrías explicarte un poco mejor =) ?

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 13/05/2011, 14:36
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Respuesta: Duda con try catch

si tienen razon me equivique son la excepciones , el caso es que el metodo 2(); no tiene ningun try entonces no se si con el try del 1 cubra las excepciones que surjan en el metodo 2();


saludos
  #6 (permalink)  
Antiguo 13/05/2011, 15:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con try catch

Claro, todo lo que esta dentro del try {} va a ser cachado en caso de ser un tipo de excepcion declarada, ve el siguiente ejemplo:
Código PHP:
Ver original
  1. // Excepciones de ejemplo
  2. class MyException1 extends Exception{}
  3. class MyException2 extends Exception{}
  4. class MyException1_2 extends MyException1{}
  5.  
  6. // Funciones de ejemplo
  7. function foo1() {
  8.     throw new MyException1("foo1");
  9. }
  10.  
  11. function foo2() {
  12.     throw new MyException2("foo2");
  13. }
  14.  
  15. function foo1_2() {
  16.     throw new MyException1_2("foo2");
  17. }
  18.  
  19. function foo3() {
  20.     foo1_2();
  21. }
  22.  
  23. // Captura todo (porque captura Exception)
  24. try {
  25.     foo1();
  26. } catch (Exception $e) {
  27.     echo $e->getMessage();
  28. }
  29.  
  30. // Captura solo MyException1
  31. try {
  32.     foo1();
  33. } catch (MyException1 $e) {
  34.     echo $e->getMessage();
  35. }
  36.  
  37. // Captura tambien porque MyException1_2 hereda a MyException1
  38. try {
  39.     foo3();
  40. } catch (MyException1 $e) {
  41.     echo $e->getMessage();
  42. }
  43.  
  44. // No captura (Error fatal) porque MyException2 hereda directo a Exception
  45. try {
  46.     foo2();
  47. } catch (MyException1 $e) {
  48.     echo $e->getMessage();
  49. }

Para que entiendas de una mejor forma como se capturan las excepciones.
  #7 (permalink)  
Antiguo 13/05/2011, 15:13
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Respuesta: Duda con try catch

Mira segun lo que escribiste modifique asi pero no se que este mal porque no me genero el archivos de error_log();


Código PHP:
Ver original
  1. <?php
  2. class MyException2 extends Exception{}
  3.  
  4. // Funciones de ejemplo
  5. function foo1() {
  6.   try{
  7.     foo2();
  8.   }catch (Exception $e){
  9.       error_log($e);
  10.   }
  11. }
  12.  
  13. function foo2() {
  14.     throw new MyException2("foo2");
  15. }
  16. foo1();
  17. ?>


saludos
  #8 (permalink)  
Antiguo 13/05/2011, 15:39
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Duda con try catch

No estás usando las excepciones, estas declarando funciones fuera de la clase, deberías colocarlas dentro de la clase para que el ejemplo funcione. Acuérdate que lo que captura son excepciones, es decir con algo tan simple como
Código PHP:
Ver original
  1. <?php
  2. try{
  3.     throw new Exception('foo');
  4. }catch(Exception $e){
  5.     echo $e->getMessage();
  6. }
Mostrará en pantalla el mensaje, porque arrojaste una excepción y se detuvo el código para ejecutar el catch. La idea es hacer algo como
Código PHP:
Ver original
  1. <?php
  2. try{
  3.     $a = 1;
  4.     $b = 2;
  5.     if($a != $b){
  6.         throw new Exception('$a no es igual a $b');
  7.     }
  8.     echo 'Este mensaje no debe salir...';
  9. }catch(Exception $e){
  10.     echo $e->getMessage();
  11. }
y así manejes tus excepciones.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 13/05/2011, 15:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con try catch

error_log debe de guardar por defecto en el archivo php.log o donde lo tengas configurado en tu php.ini revisa la configuración.

Saludos.
  #10 (permalink)  
Antiguo 13/05/2011, 15:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Duda con try catch

Ups, me di cuenta que la segunda función que indicas sí tiene una excepción, pues te debería grabar.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 13/05/2011, 16:01
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Respuesta: Duda con try catch

hice una prueba pero no me genero el log , directamente en que parte del php.ini esta eso configurado.?


saludos
  #12 (permalink)  
Antiguo 14/05/2011, 09:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Duda con try catch

Cita:
Iniciado por RIVERMILLOS Ver Mensaje
hice una prueba pero no me genero el log , directamente en que parte del php.ini esta eso configurado.?


saludos
Supongo que buscando error_log en el archivo debe salir algo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 18/05/2011, 09:48
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Respuesta: Duda con try catch

Listo ahora si me genera el errorlog pero ahora el problema es que tengo esto.

Código PHP:
Ver original
  1. <?php
  2.     class MyException2 extends Exception{}
  3.      
  4.     // Funciones de ejemplo
  5.     function foo1() {
  6.       try{
  7.         foo2();
  8.       }catch (Exception $e){
  9.           error_log($e);
  10.       }
  11.     }
  12.      
  13.     function foo2() {
  14.         throw new MyException2("foo2");
  15.     }
  16.     foo1();
  17.     ?>


y en el archivos .log deberia salir "foo2" pero sale vacio esto que puede ser?


saludos
  #14 (permalink)  
Antiguo 18/05/2011, 10:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda con try catch

Eso es porque error_log solo funciona con strings, para guardar el mensaje deberías hacer algo como error_log($e->getMessage());

Saludos.
  #15 (permalink)  
Antiguo 18/05/2011, 13:12
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Respuesta: Duda con try catch

Y si le paso la funcion json_encode para que me convierta eso en una cadena funcionaria?


saludos
  #16 (permalink)  
Antiguo 18/05/2011, 13:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Duda con try catch

Cita:
Iniciado por RIVERMILLOS Ver Mensaje
Y si le paso la funcion json_encode para que me convierta eso en una cadena funcionaria?


saludos
Si lo consideras mejor, adelante.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #17 (permalink)  
Antiguo 18/05/2011, 15:19
Avatar de RIVERMILLOS  
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 8 meses
Puntos: 15
Respuesta: Duda con try catch

Lito muchas gracias, Lo que yo hago es guardar todas las excepciones que salgan en estos .log para ir controlando cosas que salgan no se si sera una buena practica ? otra cosa es que no puedo controlar los fatal error para estos que puedo hacer.?

saludos
  #18 (permalink)  
Antiguo 18/05/2011, 15:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Duda con try catch

Los errores fatales son producto de alguna mala practica de programación, son cosas que no deberían pasar.

Así que de ello no hay manera de escapar, simplemente hay que programar lo mejor posible.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

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 13:01.