Sauvegarder ses objets
Cas d'une session
Les informations indiquées ici fonctionnent aussi bien en PHP 4 qu'en PHP 5. Il faut distinguer le
cas des sessions où il faut passer un objet d'une page à l'autre et le cas d'une sauvegarde d'un objet
sur disque.
Dans le premier cas, si les sessions sont utilisées les objets peuvent être passés directement d'une
page à une autre en respectant quelques règles :
• La session doit être ouverte sur chaque page par la fonction « session_start() » avant l'utilisation
de l'objet
• Les classes doivent être définies avant l'ouverture de session par session_start() et l'appel à
l'objet, ce qui implique soit de répéter cette déclaration dans chaque page, soit de la placer dans
un fichier à inclure avec « require() » ou « require_once() » en début de script.
• L'objet doit être une variable de session stockée soit par la fonction « session_register() », soit à
l'aide du tableau global « $_SESSION[] ».
Voici un exemple :
objet.inc :
<?
class Panier {
// Eléments de notre panier
var $contenu;
// Ajout de $qte articles de type $code au panier
function ajout_article ($code, $qte) {
if(isset($this->contenu[$code])) $this->contenu[$code] += $qte;
else $this->contenu[$code] = $qte;
}
// Suppression de $num articles du type $artnr du panier
function suppr_article ($code, $qte) {
if ($this->contenu[$code] > $qte) {
$this->contenu[$code] -= $qte;
return TRUE;
} else {
return FALSE;
}
}
function liste_article() {
foreach($this->contenu as $ref => $qte) echo "$ref=$qte <br />";
}
}
class Panier_nomme extends Panier {
var $proprietaire;
function nom_proprietaire ($nom) {
$this->proprietaire = $nom;
}
}
S. ROHAUT Cours Programmation PHP Page 91/93?>
objet.php :
<?php
require_once("objet.inc");
session_start();
?>
<html>
<head>
<title>Page 1</title>
</head>
<body>
<?
$_SESSION['objet']=new Panier_nomme;
$_SESSION['objet']->nom_proprietaire("seb");
$_SESSION['objet']->ajout_article("ref01",3);
$_SESSION['objet']->suppr_article("ref01",1);
$_SESSION['objet']->ajout_article("ref02",3);
echo "{$_SESSION['objet']->proprietaire}<br />";
?>
<a href="objet2.php">Page 2</a>
</body>
</html>
objet2.php :
<?php
require_once("objet.inc");
session_start();
?>
<html>
<head>
<title>Page 2</title>
</head>
<body>
<?
echo $_SESSION['objet']->proprietaire."<br />";
$_SESSION['objet']->liste_article();
?>
</body>
</html>
Autres cas
Rien n'empêche de conserver un objet pour le récupérer plus tard, même après avoir fermé une
session. Pour ça on peut le stocker dans un fichier ou en base de données. Pour récupérer un format
correct de données pour stockage, il faut utiliser les fonctions « serialize() » et « unserialize() ».
La première fonction retourne une chaîne de texte représentant la variable (pas forcément un objet)
passée en paramètre. Ce format de donnée peut ainsi être stocké dans la manière qui vous convient.
Le seconde fonction prend comme paramètre la chaîne de texte issue de serialize et retourne la
variable du type originel, dans notre cas un objet.
classa.inc:
<?php
class A {
var $one = 1;
function show_one() {
echo $this->one;
S. ROHAUT Cours Programmation PHP Page 92/93
Cas d'une session
Les informations indiquées ici fonctionnent aussi bien en PHP 4 qu'en PHP 5. Il faut distinguer le
cas des sessions où il faut passer un objet d'une page à l'autre et le cas d'une sauvegarde d'un objet
sur disque.
Dans le premier cas, si les sessions sont utilisées les objets peuvent être passés directement d'une
page à une autre en respectant quelques règles :
• La session doit être ouverte sur chaque page par la fonction « session_start() » avant l'utilisation
de l'objet
• Les classes doivent être définies avant l'ouverture de session par session_start() et l'appel à
l'objet, ce qui implique soit de répéter cette déclaration dans chaque page, soit de la placer dans
un fichier à inclure avec « require() » ou « require_once() » en début de script.
• L'objet doit être une variable de session stockée soit par la fonction « session_register() », soit à
l'aide du tableau global « $_SESSION[] ».
Voici un exemple :
objet.inc :
<?
class Panier {
// Eléments de notre panier
var $contenu;
// Ajout de $qte articles de type $code au panier
function ajout_article ($code, $qte) {
if(isset($this->contenu[$code])) $this->contenu[$code] += $qte;
else $this->contenu[$code] = $qte;
}
// Suppression de $num articles du type $artnr du panier
function suppr_article ($code, $qte) {
if ($this->contenu[$code] > $qte) {
$this->contenu[$code] -= $qte;
return TRUE;
} else {
return FALSE;
}
}
function liste_article() {
foreach($this->contenu as $ref => $qte) echo "$ref=$qte <br />";
}
}
class Panier_nomme extends Panier {
var $proprietaire;
function nom_proprietaire ($nom) {
$this->proprietaire = $nom;
}
}
S. ROHAUT Cours Programmation PHP Page 91/93?>
objet.php :
<?php
require_once("objet.inc");
session_start();
?>
<html>
<head>
<title>Page 1</title>
</head>
<body>
<?
$_SESSION['objet']=new Panier_nomme;
$_SESSION['objet']->nom_proprietaire("seb");
$_SESSION['objet']->ajout_article("ref01",3);
$_SESSION['objet']->suppr_article("ref01",1);
$_SESSION['objet']->ajout_article("ref02",3);
echo "{$_SESSION['objet']->proprietaire}<br />";
?>
<a href="objet2.php">Page 2</a>
</body>
</html>
objet2.php :
<?php
require_once("objet.inc");
session_start();
?>
<html>
<head>
<title>Page 2</title>
</head>
<body>
<?
echo $_SESSION['objet']->proprietaire."<br />";
$_SESSION['objet']->liste_article();
?>
</body>
</html>
Autres cas
Rien n'empêche de conserver un objet pour le récupérer plus tard, même après avoir fermé une
session. Pour ça on peut le stocker dans un fichier ou en base de données. Pour récupérer un format
correct de données pour stockage, il faut utiliser les fonctions « serialize() » et « unserialize() ».
La première fonction retourne une chaîne de texte représentant la variable (pas forcément un objet)
passée en paramètre. Ce format de donnée peut ainsi être stocké dans la manière qui vous convient.
Le seconde fonction prend comme paramètre la chaîne de texte issue de serialize et retourne la
variable du type originel, dans notre cas un objet.
classa.inc:
<?php
class A {
var $one = 1;
function show_one() {
echo $this->one;
S. ROHAUT Cours Programmation PHP Page 92/93