Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Analizis de Clase

Estas en el tema de Analizis de Clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. He creado esta clase empleando mysqli para mostrar los usuarios activos en un sitio y necesito su sugerencias para optimizarlo lo más posible para su ...
  #1 (permalink)  
Antiguo 01/04/2008, 08:22
Avatar de alaintm  
Fecha de Ingreso: marzo-2007
Mensajes: 149
Antigüedad: 17 años, 1 mes
Puntos: 1
Analizis de Clase

He creado esta clase empleando mysqli para mostrar los usuarios activos en un sitio y necesito su sugerencias para optimizarlo lo más posible para su empleo en futuros proyectos de nuestro centro.
Antes de su creación comencé a crear una clase para el manejo de las BD pero como empleo mysqli me parecio una redundancia su creación, es correcta esta decisión?

Clase UsuariosEnLinea

Código PHP:
<?php

  
/**
  *
  * Conexion a db mysql
  *
  * @author Alain Turiño Mena
  * @link [email protected]
  * @copyright Copyleft GNU/GPL.
  *
  */

  
$sevidor "localhost";
  
$usuario "usuarios";
  
$clave   "clave";
  
$bd      "bd";

  class 
UsuariosEnLinea{
    
    public function 
__construct(){
      global 
$servidor$usuario$clave$bd;

      
$mysql          = new mysqli($servidor$usuario$clave$bd);
      
$ip             ip2long($_SERVER["REMOTE_ADDR"]);
      
$tiempo_limite  300;
      
$tiempo_actual  time();

      
$mysql->query("DELETE FROM usuariosenlinea WHERE tiempo < $tiempo_actual - $tiempo_limite");

      if(
$mysql->query("SELECT ip FROM usuariosenlinea WHERE ip = $ip") == 0){
         
$mysql->query("UPDATE usuariosenlinea SET tiempo = $tiempo_actual WHERE ip = $ip");
      }
      else{
         
$mysql->query("INSERT INTO usuariosenlinea (ip, tiempo) VALUE ('$ip','$tiempo_actual')");
      }

      
$usuarios_conectado $mysql->query("SELECT ip FROM usuariosenlinea");

      echo 
$usuarios_conectado->num_rows;

      
$usuarios_conectado->close();

      
$mysql->close();
    }
  }
?>
  #2 (permalink)  
Antiguo 01/04/2008, 09:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Analizis de Clase

1.- No uses variables globales cuando estas usando programación orientada a objetos, usa el patrón Registry o una clase de configuración.
2.- El calculo para hacer el "purge" lo puedes hacer en PHP, no se lo dejes completo al SQL.
3.- Seria buena idea que guardaras el valor de cuantos están conectados para poderlo usar después y no tener que estar re-calculando el valor para mostrarlo varias veces en la pagina.

Saludos.
  #3 (permalink)  
Antiguo 01/04/2008, 09:13
Avatar de alaintm  
Fecha de Ingreso: marzo-2007
Mensajes: 149
Antigüedad: 17 años, 1 mes
Puntos: 1
Re: Analizis de Clase

Cita:
Iniciado por GatorV Ver Mensaje
1.- No uses variables globales cuando estas usando programación orientada a objetos, usa el patrón Registry o una clase de configuración.
2.- El calculo para hacer el "purge" lo puedes hacer en PHP, no se lo dejes completo al SQL.
3.- Seria buena idea que guardaras el valor de cuantos están conectados para poderlo usar después y no tener que estar re-calculando el valor para mostrarlo varias veces en la pagina.

Saludos.
No entiendo cuando te refieres al patron Registry y con respecto a una clase de configuración lo que entiendo es que cree una clase donde su objetivo se tener los valores de configuración

Y con respecto al purge no logro captar la idea.

Agradezco de antemano tu ayuda.
  #4 (permalink)  
Antiguo 01/04/2008, 09:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Analizis de Clase

Puedes buscar en Google por el patrón Registry, es básicamente una clase que se encarga de llevar un registro.

En tu Delete tienes:
Código:
DELETE FROM usuariosenlinea WHERE tiempo < $tiempo_actual - $tiempo_limite
Eso lo puedes calcular directo desde PHP:
Código PHP:
$aborrar $tiempo_actual $tiempo_limite;
$mysql->query("DELETE FROM usuariosenlinea WHERE tiempo < $aborrar"); 
Saludos.
  #5 (permalink)  
Antiguo 01/04/2008, 10:02
Avatar de alaintm  
Fecha de Ingreso: marzo-2007
Mensajes: 149
Antigüedad: 17 años, 1 mes
Puntos: 1
Re: Analizis de Clase

Hice las primeras dos variaciones que me sugeriste, pero la tercera cuando te refieres a almacenar el resultado te refieres a crear una instancia del objeto y que este llame a una función que muestre el resultado n veces?

Aquí te muestro las variaciones.

Código PHP:
class UsuariosEnLinea{

    public function 
__construct($servidor$usuario$clave$bd){

      
$mysql                 = new mysqli($servidor$usuario$clave$bd);
      
$ip                       ip2long($_SERVER["REMOTE_ADDR"]);
      
$tiempo_limite     300;
      
$tiempo_actual    time();
      
$tiempo_conectado $tiempo_actual $tiempo_limite;

      
$mysql->query("DELETE FROM usuariosenlinea WHERE tiempo < $tiempo_conectado");

      if(
$mysql->query("SELECT ip FROM usuariosenlinea WHERE ip = $ip") == 0){
         
$mysql->query("UPDATE usuariosenlinea SET tiempo = $tiempo_actual WHERE ip = $ip");
      }
      else{
         
$mysql->query("INSERT INTO usuariosenlinea (ip, tiempo) VALUE ('$ip','$tiempo_actual')");
      }

      
$usuarios_conectado $mysql->query("SELECT ip FROM usuariosenlinea");

      echo 
$usuarios_conectado->num_rows;

      
$usuarios_conectado->close();

      
$mysql->close();
    }
  }

  
$ul = new UsuariosEnLinea($servidor$usuario$clave$bd); 
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 21:04.