Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   Analizis de Clase (http://www.forosdelweb.com/f68/analizis-clase-571383/)

alaintm 01/04/2008 08:22

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();
    }
  }
?>


GatorV 01/04/2008 09:02

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.

alaintm 01/04/2008 09:13

Re: Analizis de Clase
 
Cita:

Iniciado por GatorV (Mensaje 2345010)
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.

GatorV 01/04/2008 09:47

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.

alaintm 01/04/2008 10:02

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); 



La zona horaria es GMT -6. Ahora son las 07:10.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.