Bonjour !
Vous avez besoin de créer une petite plateforme web simple et sans prétentions mais vous devez stocker des données ? Seulement, vous trouvez un peu exagérer d'installer une base de données, de la configurer et de vous retrouver à faire des requêtes SQL un peu partout ? Alors, ce système est fait pour vous ! J'imagine que vous vous demandez tout de même où on va mettre nos données ? Et bien, dans des fichiers ! Ne vous inquiétez normalement, vous ne perdrez pas trop de performance. Je ferais des essais comparatifs dans peu de temps !
Je tiens tout de même à préciser que si vous avez besoin d'effectuer des actions plus complexes, comme le tri, des conditions ou stocker de très nombreuses informations : optez pour la base de donnée.
• Introduction :
1. Serialize() & Unserialize().
Notre petit système de gestion de données va se reposer sur principalement deux fonctions : serialize() et unserialize(). La sérialisation est un processus génial qui permet de, je cite la documentation PHP :
serialize() retourne une chaîne contenant une représentation linéaire de value, pour stockage.
C'est une technique pratique pour stocker ou passer des valeurs de PHP entre scripts, sans perdre ni leur structure, ni leur type.
Comme vous l'aurez comprit, on transforme une variable en une chaine de caractère qui contient toutes ses informations, sans la moindre perte ! Donc par exemple, un tableau, qui pourrait ressembler par mégarde aux informations d'un utilisateur de bot qu'on serialize :
<span class="syntaxhtml"><span class="syntaxdefault"><?php <br /></span><span class="syntaxcomment">// Début du script.<br /><br />// On déclare notre tableau à sérialiser. Bien sûr, normalement, on crypte le mot de passe!<br /></span><span class="syntaxdefault">$user </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Username'</span><span class="syntaxkeyword">=></span><span class="syntaxstring">'SuperGogetaSayen4'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'Password'</span><span class="syntaxkeyword">=></span><span class="syntaxstring">'Jesuisunhomard'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'Key'</span><span class="syntaxkeyword">=></span><span class="syntaxstring">'AZ39-6874-LMX2'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Permission'</span><span class="syntaxkeyword">=></span><span class="syntaxdefault">0</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> <br /></span><span class="syntaxcomment">// On le sérialise et on affiche le résultat. <br /></span><span class="syntaxdefault">echo serialize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$user</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxcomment">// Fin du script.<br /></span><span class="syntaxdefault">?><br /></span><br />// Affiche comme résultat dans le navigateur :<br />a:4:{s:8:"Username";s:17:"SuperGogetaSayen4";s:8:"Password";s:14:"Jesuisunhomard";s:3:"Key";s:14:"AZ39-6874-LMX2";s:10:"Permission";i:0;</span>
Même si ça semble peut compréhensible, vous avez surement repérer à l'intérieur de la chaine, vos valeurs et vos clefs ! Alors tout espoir de récupérer votre array() n'est pas perdu ! Regardez donc :
<span class="syntaxhtml"><span class="syntaxdefault"><?php<br /></span><span class="syntaxcomment">// Début du script.<br /><br />// On déclare notre tableau à sérialiser. Bien sûr, normalement, on crypte le mot de passe!<br /></span><span class="syntaxdefault">$user </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Username'</span><span class="syntaxkeyword">=></span><span class="syntaxstring">'SuperGogetaSayen4'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'Password'</span><span class="syntaxkeyword">=></span><span class="syntaxstring">'Jesuisunhomard'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'Key'</span><span class="syntaxkeyword">=></span><span class="syntaxstring">'AZ39-6874-LMX2'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Permission'</span><span class="syntaxkeyword">=></span><span class="syntaxdefault">0</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> <br /></span><span class="syntaxcomment">// On stocke dans une variable le résultat de la sérialisation.<br /></span><span class="syntaxdefault">$serialized </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> serialize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$user</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> <br /></span><span class="syntaxcomment">// Les balises HTML <pre> permettent d'afficher lisiblement un array.<br />// On le désérialise et on affiche le tableau !<br /></span><span class="syntaxdefault">echo </span><span class="syntaxstring">'<pre>'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">unserialize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$serialized</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">'</pre'</span><span class="syntaxkeyword">>;<br /><br /></span><span class="syntaxcomment">// Fin du script.<br /></span><span class="syntaxdefault">?><br /></span><br />// Affiche comme résultat dans le navigateur : <br /><br />Array<br />(<br /> [Username] => SuperGogetaSayen4<br /> [Password] => Jesuisunhomard<br /> [Key] => AZ39-6874-LMX2<br /> [Permission] => 0<br />)</span>
Comme vous pouvez le constater, le tableau a été restitué de manière intact ! Il y a de très nombreuses utilisations possible à ces deux fonctions, enregistrer des données ou des objets (Car oui, on peut aussi sérialiser des objets!) dans des fichiers, les transmettre dans une URL etc... Dans ce cours, ce qui va nous intéresser est la première idée. Les enregistrer dans des fichiers !
2. Notre système de gestion de données.
Alors, le principe de base n'est pas très compliqué. Chaque élément que vous allez vouloir stocker dans votre fichier va suivre ce schéma :
• ID : L'identifiant unique de votre élément, qui vous permettra de le traiter et de le retrouver.
• Un tableau, ou un objet si vous vous sentez plus à l'aise avec, qui contiendra toutes les informations de votre élément. Comme notre array User() dans l'exemple précédent.
Pendant le cours, je formaterais les éléments à sauvegarder dans un objet. (Si vous ne voulez pas vous ennuyer à utiliser POO vous pouvez parfaitement utiliser des tableaux associatifs à la place.) le principe de notre système est le suivant :
• On ouvre notre fichier, qui servira à stocker nos données. Dedans, il y aura un array qui contiendra toutes nos données. Chaque données représentera une ligne du tableau et la clef de celui-ci servira d'Identifiant Unique.
Notre objet qui va gérer les données doit pouvoir :
• Ajouter une entrée.
• La mettre à jour.
• L'effacer.
• Compter le nombre totale d'entrées.
Je vous joins ci-dessous la classe que j'ai écris en respectant ce cahier des charges. Les sources ne sont pas difficiles à comprendre et le code est amplement commenté. Essayez de bien le comprendre si vous voulez le réutiliser ou l'implémenter différemment !
DataSerializer:
<span class="syntaxdefault"><br /></span><span class="syntaxcomment">/**<br />* Classe permettant de sérialiser facilement des listes de données dans un fichier.<br />* @author Shornaal.<br />* @version 1.0<br />*/<br /><br /></span><span class="syntaxdefault">class DataSerializer<br /></span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> protected $file</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> <br /> $data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault"> <br /> public function __construct</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">setFile</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> unserialize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">file_get_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">file</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">/**<br /> /* Définit le fichier où enregistrer les données sérialisée.<br /> /* @param $file Le chemin du fichier dans lequel enregistrer.<br /> /* @return void<br /> /**/<br /></span><span class="syntaxdefault"> public function setFile</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if</span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">file_exists</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> throw new InvalidArgumentException</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Le fichier '</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $file </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">' passé en paramètre n\'existe pas.'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{</span><span class="syntaxdefault"> <br /> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">file </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $file</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">/**<br /> /* Ajoute une entrée à la table.<br /> /* @param $data ? Les données à ajouter, sous forme d'Objet ou d'Array.<br /> /* @return void<br /> /**/<br /></span><span class="syntaxdefault"> public function insert</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">[]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $data</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> file_put_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">file</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> serialize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">/**<br /> /* Met à jour une entrée dans la table.<br /> /* @param $id int L'identifiant de l'entrée à supprimer.<br /> /* @param $data ? Les données à mettre à jour, sous forme d'Objet ou d'Array.<br /> /* @return void<br /> /**/<br /></span><span class="syntaxdefault"> public function update</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $data</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if</span><span class="syntaxkeyword">(!isset(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">||</span><span class="syntaxdefault"> empty</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$data</span><span class="syntaxkeyword">))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> throw new RuntimeException</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'L\'entrée à éditer n°'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $id </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">' ou les données à sauvegarder ne sont pas définis. '</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $data</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> file_put_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">file</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> serialize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">/**<br /> /* Supprime une entrée dans la table.<br /> /* @param $id int L'identifiant de l'entrée à supprimer.<br /> /* @return array<br /> /**/<br /></span><span class="syntaxdefault"> <br /> public function delete</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if</span><span class="syntaxkeyword">(!isset(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">]))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> throw new RuntimeException</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'L\'entrée à supprimer n° '</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $id </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">' n\'existe pas !'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> unset</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">]);<br /></span><span class="syntaxdefault"> file_put_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">file</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> serialize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">/**<br /> /* Renvoit le nombre d'entrée dans le tableau contenant les données.<br /> /* @return int<br /> /**/<br /></span><span class="syntaxdefault"> public function count</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return count</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">-</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">// GETTERS <br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">/**<br /> /* Renvoit l'adresse du fichier.<br /> /* @return string<br /> /**/<br /></span><span class="syntaxdefault"> public function file</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">file</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">/**<br /> /* Renvoit les données stockées dans le fichier.<br /> /* @return array<br /> /**/<br /></span><span class="syntaxdefault"> public function data</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br />}<br /></span><span class="syntaxdefault"> </span>
• Mise en pratique :
Nous désirons mettre en place un système simple qui permet de stocker un nom d'utilisateur, un mot de passe (Hashé en MD5), une clé de licence ainsi qu'une date d'expiration pour cette dernière. Nous allons donc créer un Objet Account qui représentera nos données. Il héritera d'un Objet générique Entity, ce dernier implémentera ArrayAccess et des fonctions utiles à toutes entités. Il suffira de les sérialiser dans un fichier nommé "Account.txt" pour les garder en mémoire. Nous allons avoir besoin de de 5 fichiers :
• Entity.class.php (Cette dernière classe est notamment utilisée dans le cours du site du zéro sur la POO en PHP et est très utile.)
<span class="syntaxdefault">abstract class Entity implements ArrayAccess<br /></span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> protected $erreurs </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(),<br /></span><span class="syntaxdefault"> $id</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> <br /> public function __construct</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">array $donnees </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">())<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if </span><span class="syntaxkeyword">(!empty(</span><span class="syntaxdefault">$donnees</span><span class="syntaxkeyword">))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">hydrate</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$donnees</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function isNew</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return empty</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">id</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function erreurs</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">erreurs</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function id</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">id</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function setId</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$id</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">id </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(int)</span><span class="syntaxdefault"> $id</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function hydrate</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">array $donnees</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$donnees as $attribut </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $valeur</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $methode </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'set'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">ucfirst</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$attribut</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> <br /> if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">is_callable</span><span class="syntaxkeyword">(array(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $methode</span><span class="syntaxkeyword">)))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">$methode</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$valeur</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function offsetGet</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> is_callable</span><span class="syntaxkeyword">(array(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $var</span><span class="syntaxkeyword">)))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function offsetSet</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $value</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $method </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'set'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">ucfirst</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> <br /> if </span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> is_callable</span><span class="syntaxkeyword">(array(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $method</span><span class="syntaxkeyword">)))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">$method</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function offsetExists</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return isset</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> is_callable</span><span class="syntaxkeyword">(array(</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $var</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function offsetUnset</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$var</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> throw new Exception</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Impossible de supprimer une quelconque valeur'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br />}</span><span class="syntaxdefault"> </span>
• Account.class.php
<span class="syntaxdefault">class Account extends Entity<br /></span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> protected $username</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> <br /> $password</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> $key</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault"> $expiration</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> <br /> const INVALID_USERNAME </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> const INVALID_PASSWORD </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 2</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> const INVALID_KEY </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 3</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> const INVALID_EXPIRATION </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 4</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">// SETTERS //<br /></span><span class="syntaxdefault"> <br /> public function setUsername</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$username</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if</span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">is_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$username</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">||</span><span class="syntaxdefault"> empty</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$username</span><span class="syntaxkeyword">))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">erreurs</span><span class="syntaxkeyword">[]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">INVALID_USERNAME</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">username </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $username</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function setPassword</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$password</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if</span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">is_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$password</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">||</span><span class="syntaxdefault"> empty</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$password</span><span class="syntaxkeyword">))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">erreurs</span><span class="syntaxkeyword">[]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">INVALID_PASSWORD</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">password </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> md5</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$password</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function setKey</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if</span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">is_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">||</span><span class="syntaxdefault"> empty</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$key</span><span class="syntaxkeyword">))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">erreurs</span><span class="syntaxkeyword">[]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">INVALID_KEY</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">key </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $key</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function setExpiration</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$expiration</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> if</span><span class="syntaxkeyword">(!</span><span class="syntaxdefault">is_integer</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$expiration</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">||</span><span class="syntaxdefault"> empty</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$expiration</span><span class="syntaxkeyword">))<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">erreurs</span><span class="syntaxkeyword">[]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> self</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">INVALID_EXPIRATION</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">expiration </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $expiration</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> </span><span class="syntaxcomment">// GETTERS //<br /></span><span class="syntaxdefault"> <br /> public function username</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">username</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function password</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">password</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function key</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">key</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> <br /> public function expiration</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> return $this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">expiration</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br />}</span><span class="syntaxdefault"> </span>
• DataSerializer.class.php qui est disponible juste au-dessus.
• Account.txt (Vide mais il faut le créer au préalable dans le répertoire)
• Index.php
<span class="syntaxhtml"><br />// On créer une nouvelle instance de notre objet DataSerializer.<br /><span class="syntaxdefault"><?php<br />$Data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> new DataSerializer</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'C:\wamp\www\XMLSerialisation\Account.txt'</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxcomment">/* Pour ajouter une entrée à notre fichier Account.txt. C'est simple. On instance d'abord notre objet à sérialiser :<br />* $Account = new Account(array('username' => 'Spitfire', 'password' => 'MonMotDePasse', 'key' => '1921-6811-8712-9456', 'expiration'<br /> => (time() * 7 * 24 * 60 * 60));<br />* $Data->insert($Account); */<br /><br />// Grâce à l'implémentation d'ArrayAccess dans l'objet Account (Hérité d'Entity) on peut naviguer dans notre objet comme dans un <br /></span><span class="syntaxdefault">tableau </span><span class="syntaxkeyword">:<br /></span><span class="syntaxdefault">?><br /></span><div><br /><h3>Liste des comptes :</h3><br /><span class="syntaxdefault"><?php foreach</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$Data</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">()</span><span class="syntaxdefault"> as $object</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> ?></span><p>Nom d'utilisateur: <span class="syntaxdefault"><?php echo $object</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">username</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">?></span><br /><br /> Mot de passe: <span class="syntaxdefault"><?php echo $object</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">password</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">?></span><br /><br /> License: <span class="syntaxdefault"><?php echo $object</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">key</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">?></span><br /><br /> Date d'expiration: <span class="syntaxdefault"><?php echo $object</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">expiration</span><span class="syntaxkeyword">();</span><span class="syntaxdefault">?></span><br/></p><span class="syntaxdefault"><?php<br /></span><span class="syntaxkeyword">}</span><span class="syntaxdefault">?><br /></span></div></span>