Foros del Web » Programando para Internet » PHP »

error_handler no toma algunos errores

Estas en el tema de error_handler no toma algunos errores en el foro de PHP en Foros del Web. Buenas! uff.. tanto tiempo! saludos a toda la comunidad! Problema: Resulta que mi viejo MVC verificaba si la funcion a la cual llamaba necesitaba un ...
  #1 (permalink)  
Antiguo 26/10/2013, 23:55
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Pregunta error_handler no toma algunos errores

Buenas! uff.. tanto tiempo! saludos a toda la comunidad!

Problema:
Resulta que mi viejo MVC verificaba si la funcion a la cual llamaba necesitaba un argumento obligatorio, para lo cual no necesitaba Reflection.. simplemente activaba un set_error_handler y listo.
Actualizo mi version de PHP, y bueno.. no anda mas.. y tira
Cita:
Notice: Undefined variable: argument ....
Preguntas
Algo se me paso por alto?
Hay un metodo mejor?
Consume mucho la clase ReflectionClass? no se si alguien se puso a testear performance

Gracias por su tiempo!
Saludos.
  #2 (permalink)  
Antiguo 27/10/2013, 00:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error_handler no toma algunos errores

Cita:
Algo se me paso por alto?
Claro, no has consultado el manual.

Si revisas el manual acerca de el manejo de errores verás que puedes activar la configuración que tenías antes, aunque a decir verdad usar reflexión y/o error_handler para verificar argumentos parece una idea desquiciada ya de entrada.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/10/2013, 00:22
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: error_handler no toma algunos errores

alternativa..? que me propones?
  #4 (permalink)  
Antiguo 27/10/2013, 00:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error_handler no toma algunos errores

Mejorar el diseño de tu software usando Excepciones, así es más fácil controlar este tipo de casos sin tener que hackear la configuración ni usar reflexión.

Código PHP:
Ver original
  1. function fun($foo, $bar = null) {
  2.   if (!$bar) {
  3.     throw new Exception('Missing $bar argument!');
  4.   }
  5. }
  6.  
  7. try {
  8.   $x = fun($y);
  9. } catch (Exception $e) {
  10.   var_dump($e);
  11. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 27/10/2013, 01:41
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: error_handler no toma algunos errores

tu ejemplo no se puede aplicar con $foo... cosa que quiero hacer justamente por eso salta el error que puse en Quote... si lo hiciera como vos lo hiciste no saltaria ese error....
  #6 (permalink)  
Antiguo 27/10/2013, 01:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error_handler no toma algunos errores

Entonces para eso está el reporte de errores, ni más ni menos, sólo debes entender que dichas notificaciones sólo deberían mostrarse en desarrollo.

Si buscas que en producción eso también funcione entonces si deberías considerar que tu sistema está mal diseñado, sobre todo si se trata de un argumento que es obligatorio.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 27/10/2013, 05:20
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: error_handler no toma algunos errores

Agradezco tu tiempo pateketrueke.

Agradeceria que alguien me ayude con mi problema. No estoy interesado en una "remodelacion" de diseño. Solo tengo ese problema y necesito una mano para solucionarlo.

Saludos.
  #8 (permalink)  
Antiguo 27/10/2013, 10:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error_handler no toma algunos errores

¿Y qué tipo de ayuda estás esperando?

Perfectamente te he indicado que consultes el manual, ahí está la información que buscas.

Google: php error_reporting
Manual: set_error_handler()
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 27/10/2013, 10:38
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: error_handler no toma algunos errores

Cita:
Iniciado por Fernand0 Ver Mensaje
Preguntas
Algo se me paso por alto?
Hay un metodo mejor?
Consume mucho la clase ReflectionClass? no se si alguien se puso a testear performance
Me decis "no leiste el manual".. que parte del manual supuestamente no lei? es extenso, ya lo lei, si pregunte si deje pasar algo por alto, no se.. decimelo, no creo que te cueste mucho
Si quisiera ser EXTREMADAMENTE autodidacta ni pediria ayuda aca.

Saludos. :s
  #10 (permalink)  
Antiguo 27/10/2013, 10:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error_handler no toma algunos errores

Bueno, si la función problemática en cuestión es set_error_handler(), ¿qué parte del manual crees que deberías leer?

Yo comenzaría por entender cómo funciona set_error_handler() antes que nada.

Google: php set_error_handler()
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 27/10/2013, 11:27
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: error_handler no toma algunos errores

Código PHP:
Ver original
  1. set_error_handler('errorHandler');
  2.  
  3. function errorHandler($errno, $errstr)
  4. {
  5.     echo "error: $errno<br>";
  6. }
  7.  
  8. function a($b)
  9. {
  10.     echo "$b<br>";
  11. }
  12.  
  13. a();

este codigo obviamente funciona, el tema es que a traves de...

Control.php
Código PHP:
Ver original
  1. argControl::start();
  2. $this->object = new $class();
  3. argControl::stop();

argControl.php
Código PHP:
Ver original
  1. class argControl
  2. {
  3.    
  4.     public static $func = array(
  5.                                __CLASS__,
  6.                                'errorHandler'
  7.                            );
  8.    
  9.     public static function start($func = null)
  10.     {
  11.         if(!empty($func))
  12.             static::$func = $func;
  13.        
  14.         set_error_handler(static::$func);
  15.     }
  16.    
  17.     public static function stop()
  18.     {
  19.         restore_error_handler();
  20.     }
  21.    
  22.     public static function errorHandler($errno, $errstr)
  23.     {
  24.         echo "error: $errno<br>";
  25.     }
  26.    
  27. }

no.. :/
  #12 (permalink)  
Antiguo 27/10/2013, 11:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error_handler no toma algunos errores

Me pregunto si de verdad lees parte del manual, no sólo el código, también los detalles de implementación y valores de retorno, etc.

Cita:
Es importante recordar que el gestor de errores estándar de PHP es completamente evitado por los tipos de errores especificados por error_types a menos que la función de llamada de retorno devuelva FALSE. La configuración de error_reporting() no tendrá efecto y su gestor de errores será llamado de todas formas - aunque aún es capaz de leer el valor actual de error_reporting y actuar de manera apropiada. En particular, observe que este valor será 0 si a la sentencia que causó el error se le añadió al principio el operador de control de errores @ .
Revisa tu implementación, está claro que no sigues las recomendaciones del manual.

PDTA: Acabo de probar tu segundo ejemplo y me funciona perfectamente, ¿será que no tienes configurada correctamente tu instalación de PHP?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 27/10/2013, 12:19
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: error_handler no toma algunos errores

muestro el codigo para el que le interese...

cada clase es un archivo:

Código PHP:
Ver original
  1. class Station
  2. {
  3.    
  4.     private $object = null;
  5.    
  6.     private $return = null;
  7.    
  8.     public function __construct(Route $route)
  9.     {
  10.         extract($route->route);
  11.        
  12.         $this->locationExists($location);
  13.         $this->actionExists($action, $argument);
  14.     }
  15.    
  16.     private function locationExists($name)
  17.     {
  18.         $class = "application\\location\\$name";
  19.        
  20.         if(!class_exists($class))
  21.             throw new Exception();
  22.        
  23.         argControl::start();
  24.         $this->object = new $class();
  25.         argControl::stop();
  26.     }
  27.    
  28.     private function actionExists($action, $argument)
  29.     {
  30.         $object = $this->object;
  31.        
  32.         if(!method_exists($object, $action))
  33.             throw new Exception();
  34.        
  35.         argControl::start();
  36.         if(is_null($argument))
  37.             $this->return = $object->$action();
  38.         else
  39.             $this->return = $object->$action($argument);
  40.         argControl::stop();
  41.     }
  42.    
  43. }

Código PHP:
Ver original
  1. class argControl
  2. {
  3.    
  4.     public static $func = array(
  5.                                __CLASS__,
  6.                                'errorHandler'
  7.                            );
  8.    
  9.     public static function start($func = null)
  10.     {
  11.         if(!empty($func))
  12.             static::$func = $func;
  13.        
  14.         set_error_handler(static::$func);
  15.     }
  16.    
  17.     public static function stop()
  18.     {
  19.         restore_error_handler();
  20.     }
  21.    
  22.     public static function errorHandler($errno, $errstr)
  23.     {
  24.         echo "error: $errno<br>";
  25.     }
  26.    
  27. }

Código PHP:
Ver original
  1. class Index extends Location
  2. {
  3.    
  4.     public function hello($arg)
  5.     {
  6.         echo "hello $arg!";
  7.     }
  8.    
  9.     public function defaultAction()
  10.     {
  11.         echo "default action<br>";
  12.     }
  13.    
  14. }


no hacia las suficientes verificaciones.. una pavada... mi PHP esta MUY oxidado.... por ahora anda bien el codigo

igual estaria bueno que los expertos digan PORQUE NO utilizarian set_error_handler o Reflection

Saludos.

PD.: no tenia nada que ver con la configuracion... ni con el manual... ni con nada de lo que se menciono previamente, aclaro para no generar dudas

Última edición por Fernand0; 28/10/2013 a las 03:41 Razón: redundancias removidas de la class Station..

Etiquetas: mvc
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 08:16.