Classe de gestion de "variables globales d'environnement"

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 041 fois - Téléchargée 17 fois

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

Ajouter un commentaire

Commentaires

cs_michaelvd
Messages postés
2
Date d'inscription
mercredi 29 septembre 2010
Statut
Membre
Dernière intervention
27 janvier 2012
-
Vraiment très sympa, bravo pour cette belle classe bien maîtrisée. Mais niveau performance et facilité, j'utiliserai plutôt une base de donnée pour ce genre d'opération.. Mais c'est très agréable de voir un objet comme celui-ci.
Utilisateur anonyme -
Le code est nickel ;-)
Mais pourquoi ne pas utiliser un fichier .ini ?
pifou25
Messages postés
150
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
21 décembre 2014
-
une base de données c'est mieux pour des gros volumes. pour quelques petites variables c'est plus rapide ainsi (pas de connexion vers la bdd à ouvrir à chaque page, en particulier)

un fichier .ini serait une possibilité mais comme j'utilise un 'include' pour simplifier l'utilisation du fichier, il fallait que le fichier soit déjà du php. Sinon j'avais pensé aussi à un fichier xml, plutot que ini, c'est un peu plus standard.
menafify
Messages postés
1
Date d'inscription
mardi 23 novembre 2010
Statut
Membre
Dernière intervention
17 mars 2012
-
je vais créer un blog en utilisant des codes, je suis un débutant et quelqu'un peut m'aider.merci d'avance

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.