Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/12/2009, 20:55
Avatar de destor77
destor77
 
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 20 años, 2 meses
Puntos: 43
constructor clase

hola,
estoy terminando de armar una clase para el manejo de errroes que es asi:
Código PHP:
Ver original
  1. class Errores {
  2. public function error_handler($ip=0, $show_user=1, $show_developer=1, $email=NULL, $log_file=NULL,$db_save=1)
  3.     {
  4.         $this->ip = $ip;
  5.         $this->show_user = $show_user;
  6.         $this->show_developer = $show_developer;
  7.         $this->email = mysql_escape_string($email);
  8.         $this->log_file = $log_file;
  9.         $this->log_message = NULL;
  10.         $this->email_sent = false;
  11.         $this->db_save = $db_save;
  12.  
  13.         $this->error_codes =  E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR;
  14.         $this->warning_codes =  E_WARNING | E_CORE_WARNING | E_COMPILE_WARNING | E_USER_WARNING;
  15.  
  16.         //associate error codes with errno...
  17.         $this->error_names = array('E_ERROR','E_WARNING','E_PARSE','E_NOTICE','E_CORE_ERROR','E_CORE_WARNING',
  18.         'E_COMPILE_ERROR','E_COMPILE_WARNING','E_USER_ERROR','E_USER_WARNING',
  19.         'E_USER_NOTICE','E_STRICT','E_RECOVERABLE_ERROR');
  20.  
  21.         for($i=0,$j=1,$num=count($this->error_names); $i<$num; $i++,$j=$j*2)
  22.         $this->error_numbers[$j] = $this->error_names[$i];
  23.     }
  24.  
  25.    
  26.    
  27.     public function handler($errno, $errstr, $errfile, $errline, $errcontext)
  28.     {
  29.         $this->errno = $errno;
  30.         $this->errstr = $errstr;
  31.         $this->errfile = $errfile;
  32.         $this->errline = $errline;
  33.         $this->errcontext = $errcontext;
  34.  
  35.         if($this->log_file)
  36.         $this->log_error_msg();
  37.  
  38.         if($this->email)
  39.         $this->send_error_msg();
  40.  
  41.         if($this->show_user)
  42.         $this->error_msg_basic();
  43.  
  44.         if($this->show_developer && preg_match("/^$this->ip$/i", $_SERVER['REMOTE_ADDR'])) //REMOTE_ADDR : HTTP_X_FORWARDED_FOR
  45.         $this->error_msg_detailed();
  46.  
  47.         /* Don't execute PHP internal error handler */
  48.         return true;
  49.     }
  50.  
  51.  
  52.    
  53.     private function error_msg_basic()
  54.     {
  55.         $message = NULL;
  56.         if($this->errno & $this->error_codes) $message .= "<b> ERROR: </ b> Ha habido un error en el código.";
  57.         if($this->errno & $this->warning_codes) $message .= "<b> ADVERTENCIA: </ b> Ha habido un error en el código.";
  58.  
  59.         if($message) $message .= ($this->email_sent)?" El desarrollador ha sido notificado.<br />\n":"<br />\n";
  60.         echo $message;
  61.     }
  62.  
  63.  
  64.     private function error_msg_detailed()
  65.     {
  66.         //settings for error display...
  67.         $silent = (2 & $this->show_developer)?true:false;
  68.         $context = (4 & $this->show_developer)?true:false;
  69.         $backtrace = (8 & $this->show_developer)?true:false;
  70.  
  71.         switch(true)
  72.         {
  73.             case (16 & $this->show_developer): $color='white'; break;
  74.             case (32 & $this->show_developer): $color='black'; break;
  75.             default: $color='red';
  76.         }
  77.  
  78.         $message =  ($silent)?"<!--\n":'';
  79.         $message .= "<pre style='color:$color;'>\n\n";
  80.         $message .= "archivo: ".print_r( $this->errfile, true)."\n";
  81.         $message .= "linea: ".print_r( $this->errline, true)."\n\n";
  82.         $message .= "código: ".print_r( $this->error_numbers[$this->errno], true)."\n";
  83.         $message .= "mensaje: ".print_r( $this->errstr, true)."\n\n";
  84.         $message .= ($context)?"contexto: ".print_r( $this->errcontext, true)."\n\n":'';
  85.         $message .= ($backtrace)?"backtrace: ".print_r( debug_backtrace(), true)."\n\n":'';
  86.         $message .= "</pre>\n";
  87.         $message .= ($silent)?"-->\n\n":'';
  88.  
  89.         echo $message;
  90.     }
  91.  
  92.  
  93.     private function send_error_msg()
  94.     {
  95.         $message = "archivo: ".print_r( $this->errfile, true)."\n";
  96.         $message .= "linea: ".print_r( $this->errline, true)."\n\n";
  97.         $message .= "código: ".print_r( $this->error_numbers[$this->errno], true)."\n";
  98.         $message .= "mensaje: ".print_r( $this->errstr, true)."\n\n";
  99.         $message .= "log: ".print_r( $this->log_message, true)."\n\n";
  100.         $message .= "contexto: ".print_r( $this->errcontext, true)."\n\n";
  101.         //$message .= "backtrace: ".print_r( $this->debug_backtrace(), true)."\n\n";
  102.  
  103.         $this->email_sent = false;
  104.         if(mail($this->email, 'Error: '.$this->errcontext['SERVER_NAME'].$this->errcontext['REQUEST_URI'], $message, "From: error@".$this->errcontext['HTTP_HOST']."\r\n"))
  105.         $this->email_sent = true;
  106.     }
  107.  
  108.  
  109.     private function log_error_msg()
  110.     {
  111.         $message =  "fecha: ".date("j M y - g:i:s A (T)", mktime())."\n";
  112.         $message .= "archivo: ".print_r( $this->errfile, true)."\n";
  113.         $message .= "linea: ".print_r( $this->errline, true)."\n\n";
  114.         $message .= "código: ".print_r( $this->error_numbers[$this->errno], true)."\n";
  115.         $message .= "mensaje: ".print_r( $this->errstr, true)."\n";
  116.         $message .= "##################################################\n\n";
  117.  
  118.         if (!$fp = fopen($this->log_file, 'a+'))
  119.         $this->log_message = "No se puede abrir / crear el archivo: $this->log_file para log error."; $log_error = true;
  120.  
  121.         if (!fwrite($fp, $message))
  122.         $this->log_message = "No es posible registro de errores para el archivo: $this->log_file. Error de Escritura."; $log_error = true;
  123.  
  124.         if(!$this->log_message)
  125.         $this->log_message = "Error al registrar en el archivo: $this->log_file.";
  126.  
  127.         fclose($fp);
  128.     }
  129. }

bien ahora quisiera agregarle el patron singleton, pero tengo la duda si se puede armar asi:
Código PHP:
Ver original
  1. public static function singleton()
  2.     {
  3.         if( self::$instance == null ) {
  4.             self::$instance = new self($ip=0, $show_user=1, $show_developer=1, $email=NULL, $log_file=NULL,$db_save=1);
  5.         }
  6.  
  7.         return self::$instance;
  8.     }

basicamente mi duda es si en el new self se pueden pasar parametros.

desde ya muchas gracias