php-med-trans

Classi persistenti tra pagine in php

Può essere utile avere delle classi di dati persistenti attraverso più pagine php.

Per ottenere una funzionalità di questo genere utilizzeremo una classe “radice” che gestirà l’inizializzazione e la memorizzazione della nostra classe

my = new myClass();
if(isset($_SESSION["myclass"]))
$this->my = unserialize($_SESSION["myclass"]);
}

function __destruct() {
echo "
salvo in sessione con stringa: ".$this->my->getString()."
";
$_SESSION["myclass"] = serialize($this->my);
}
}
?>

La classe che ci interessa utilizzare e che deve essere quindi mantenuta tra le varie pagine php sarà una cosa del genere:

contatore = 1;
}

function setString($v) {
$this->stringa = $v;
$this->contatore++;
}

function getString() {
$this->contatore++;
return $this->stringa;
}

function accessi() {
echo "
Accessi alla stringa: ".$this->contatore."
";
}
}
?>

A questo punto non ci rimane che creare due pagine diverse che utilizzeranno la nostra classe radice e la nostra classe con i dati:

Inizio Pag1

";

$r = new root();

$r->my->setString("pippo");
echo "
Stringa: ".$r->my->getString();
$r->my->setString("pippo2");
echo "
Stringa: ".$r->my->getString();
$r->my->setString("yooooo");
echo "
Stringa: ".$r->my->getString();
$r->my->accessi();
?>

ed una seconda pagina che accederà agli stessi dati:

Inizio Pag2

";

$r = new root();

echo "
Stringa: ".$r->my->getString();
$r->my->accessi();
?>

Come mi è stato suggerito si potrebbe utilizzare redis (http://redis.io/) ed il client php (https://github.com/nrk/predis) per la memorizzazione della serializzazione della classe.

Altra interessante nota è che, date le caratteristiche di riflessione delle classi php, si potrebbe pensare di analizzare a runtime la classe stessa e salvarne (magari su redis) i dati importanti