estoy terminando de armar una clase para el manejo de errroes que es asi:
Código PHP:
Ver original
class Errores { public function error_handler($ip=0, $show_user=1, $show_developer=1, $email=NULL, $log_file=NULL,$db_save=1) { $this->ip = $ip; $this->show_user = $show_user; $this->show_developer = $show_developer; $this->log_file = $log_file; $this->log_message = NULL; $this->email_sent = false; $this->db_save = $db_save; $this->error_codes = E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR; $this->warning_codes = E_WARNING | E_CORE_WARNING | E_COMPILE_WARNING | E_USER_WARNING; //associate error codes with errno... $this->error_names = array('E_ERROR','E_WARNING','E_PARSE','E_NOTICE','E_CORE_ERROR','E_CORE_WARNING', 'E_COMPILE_ERROR','E_COMPILE_WARNING','E_USER_ERROR','E_USER_WARNING', 'E_USER_NOTICE','E_STRICT','E_RECOVERABLE_ERROR'); $this->error_numbers[$j] = $this->error_names[$i]; } public function handler($errno, $errstr, $errfile, $errline, $errcontext) { $this->errno = $errno; $this->errstr = $errstr; $this->errfile = $errfile; $this->errline = $errline; $this->errcontext = $errcontext; if($this->log_file) $this->log_error_msg(); if($this->email) $this->send_error_msg(); if($this->show_user) $this->error_msg_basic(); if($this->show_developer && preg_match("/^$this->ip$/i", $_SERVER['REMOTE_ADDR'])) //REMOTE_ADDR : HTTP_X_FORWARDED_FOR $this->error_msg_detailed(); /* Don't execute PHP internal error handler */ return true; } private function error_msg_basic() { $message = NULL; if($this->errno & $this->error_codes) $message .= "<b> ERROR: </ b> Ha habido un error en el código."; if($this->errno & $this->warning_codes) $message .= "<b> ADVERTENCIA: </ b> Ha habido un error en el código."; if($message) $message .= ($this->email_sent)?" El desarrollador ha sido notificado.<br />\n":"<br />\n"; echo $message; } private function error_msg_detailed() { //settings for error display... $silent = (2 & $this->show_developer)?true:false; $context = (4 & $this->show_developer)?true:false; $backtrace = (8 & $this->show_developer)?true:false; switch(true) { case (16 & $this->show_developer): $color='white'; break; case (32 & $this->show_developer): $color='black'; break; default: $color='red'; } $message = ($silent)?"<!--\n":''; $message .= "<pre style='color:$color;'>\n\n"; $message .= "</pre>\n"; $message .= ($silent)?"-->\n\n":''; echo $message; } private function send_error_msg() { //$message .= "backtrace: ".print_r( $this->debug_backtrace(), true)."\n\n"; $this->email_sent = false; if(mail($this->email, 'Error: '.$this->errcontext['SERVER_NAME'].$this->errcontext['REQUEST_URI'], $message, "From: error@".$this->errcontext['HTTP_HOST']."\r\n")) $this->email_sent = true; } private function log_error_msg() { $message .= "##################################################\n\n"; $this->log_message = "No se puede abrir / crear el archivo: $this->log_file para log error."; $log_error = true; $this->log_message = "No es posible registro de errores para el archivo: $this->log_file. Error de Escritura."; $log_error = true; if(!$this->log_message) $this->log_message = "Error al registrar en el archivo: $this->log_file."; } }
bien ahora quisiera agregarle el patron singleton, pero tengo la duda si se puede armar asi:
Código PHP:
Ver original
public static function singleton() { if( self::$instance == null ) { self::$instance = new self($ip=0, $show_user=1, $show_developer=1, $email=NULL, $log_file=NULL,$db_save=1); } return self::$instance; }
basicamente mi duda es si en el new self se pueden pasar parametros.
desde ya muchas gracias