Classe de gestion de "variables globales d'environnement"

Contenu du snippet

Dans mon site j'avais besoin de variables "globales", qui ne soient pas seulement limitées à ma propre session, mais communes à tous les visiteurs. Un peu comme les super-globales $_SERVER. ou comme des constantes. Mais que je pourrais aussi modifier !

Le principe est donc de lire / écrire dans un fichier sous forme d'un array (nom => valeur). J'ai pas trouvé plus simple!
Le fichier (nommé *.cache.php) est créé s'il n'existe pas
Tout se passe dans les méthodes magiques __set __get

Source / Exemple :

<?php
/**
 * classe pour lire / ecrire un fichier array php
 * ceci permet de lire / ecrire une configuration facilement
 */
class cache {

 private $contenu; // cache
 private $save;
 private $name;
 private $file;

 /* constructeur */
 function __construct($cache, $save = false) {
  $this->file = "cache/$cache.cache.php";
  if($cache == 'global') $this->name = '_cache'; else $this->name = '_'.$cache;
  
  if(!is_file($this->file)) // générer le fichier vide
   file_put_contents($this->file,"<?phpn${$this->name} = array();n?>");

  include_once($this->file);
  $this->contenu = ${$this->name};

  /* enregistrer ou pas à la fermeture? */
  $this->save = $save;
 }

 function __destruct(){ /* enregistre le fichier ? */
  if($this->save) $this->save();
 }

 /* méthodes set & get */
 function __set($key, $value) {
   $this->contenu[$key] = $value;
 }

 function __get($key) {
  if(isset($this->contenu[$key])) return $this->contenu[$key];
  else { echo "GET classe 'cache({$this->name})'->$keyn"; return false; }
 }

 function get_array(){
  return $this->contenu;
 }

 function force_save($save=true){
  $this->save = $save;
 }

 function save(){ /* enregistre le fichier */
  $fp = fopen($this->file, "w");

  $txt = '<?php $'.$this->name.' = ';
  $txt .=  var_export($this->contenu, true);
  $txt .= '; ?>';

  fwrite($fp, $txt);
  fclose($fp);
 }

}

?>


Conclusion :

L'utilisation est simple, on crée un fichier - par exemple - cache/global.cache.php :
<?php $_global = array('toto' => 0); ?>

penser à l'autoload si l'on ne veut pas rajouter un include de classe!

dans les scripts on utilise pour l'appeler :

// true pour enregistrer le fichier à la fin du script :
$cache = new cache('global', true);
// lecture de la valeur
$variable_globale = $cache->toto;
// on incrémente un compteur
$cache->toto ++;

Compatibilité : v1.1

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.