[Snippet] Clase para emular variables globales

1445 visitas 2 respuestas

Buenas de nuevo, hoy os traigo algo un poquito diferente a lo que hemos posteado anteriormente, hoy traemos una clase que nos va a permitir disfrutar de variables "globales" en nuestros sistemas, sin hacer uso del superarray $_GLOBALS ni de declarar las variables como global

<?php

class Globals
{
    /**
    * Array De Datos
    *
    * @var         array
    * @access     private
    * @property static
    *
    */
    private static $data = NULL;

    /**
    * Constructor
    *
    * @param    void
    * @access    private
    * @return    void
    *
    */
    private function __construct() {}

    /**
    * Setter
    *
    * @param    string
    * @param    string
    * @access    public
    * @return    mixed
    *
    */
    public static function set($name, $value)
    { 
        return self::$data[$name] = $value;
    }

    /**
    * Getter
    *
    * @param    string
    * @access    public
    * @return    mixed
    *
    */
    public static function get($name)
    {
        return (isset(self::$data[$name])) ? self::$data[$name] : FALSE;
    }

    /**
    * Setter Sum
    *
    * @param    string
    * @param    string
    * @access    public
    * @return    mixed
    *
    */
    public static function sum($name, $value)
    {
        if(!is_numeric($value)) return FALSE;

        return (!isset(self::$data[$name])) ? self::set($name, $value) : self::$data[$name] += $value;    
    }

}
?>

Su uso es muy sencillo:

1 Incluimos la clase en nuestro código

2 Creamos una variable de acceso global:

  • Globals::Set('year', 2014);
  • En donde queramos recuperarla, incluimos de nuevo la clase y la recuperamos tal que asi: Globals::Get('year'); , si la variable ha sido declarada nos devolverá su valor, si no, nos devolverá FALSE .

3 Método accesorio: Sum()

  • Lo vamos a utilizar para sumar variables numéricas a variables ya declaradas, por ejemplo Globals::Sum('year', 10); , si la variable no hubiera sido declarada, la declararía en ese momento, es decir, lo podemos utilizar para crear nuevas variables "globales". PD: Si queremos restar, añadimos un valor negativo Globals::Sum('year', -10);

¿Cómo funciona?

La clase hace uso de un array declarado dentro de ella que guardará los valores que le pasemos, y los mantendrá en memoria al ser el array declarado como estático static , por lo que podremos acceder a ellos tras declararlos al hacer uso de la misma clase que quedará en memoria.

Comentar también, como veréis que el constructor de la clase está declarado como privado, para que no podamos instanciarla y siempre utilicemos la misma copia.

Espero a alguno os sea de utilidad!

Un saludo!!!!!

por desde España

Registrado desde: 07 Jan 03

Respuestas

0 0

Creo que para ese propósito podrías usar sesiones. ¿En qué casos has utilizado esta clase?

por desde España

Registrado desde: 02 Jul 02
0 0

Si, efectivamente se pueden utilizar sesiones para estos menesteres, pero personalmente me gusta más esta opción, gustos, sin mas.

El uso que le doy, por ejemplo es para hacer un recuento de querys en las clases de abstracción de bases de datos, al no estar, en mi caso, conectada la clase que carga la base de datos(driver) con la clase encargada de la gestión del modelo se complica hacer el recuento, por lo que hay que utilizar las globales, entonces lo que hago es en el método de consulta hacerle un Globals::sum('query_count', 1); , en las diferentes conexiones por ejemplo Globals:sum('conn_count', 1); , etc..

por desde España

Registrado desde: 07 Jan 03