mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-24 17:02:18 +01:00
117 lines
4.1 KiB
XML
117 lines
4.1 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 70f392045a26b176f206013f00fa14b86440efd1 Maintainer: yannick Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<!-- TODO Rewrite to remove usage of "you" and talk about __serialize/_unserialize -->
|
|
<sect1 xml:id="language.oop5.serialization" xmlns="http://docbook.org/ns/docbook">
|
|
<title>Sérialiser des objets - des objets en session</title>
|
|
<titleabbrev>Sérialisation d'objets</titleabbrev>
|
|
|
|
<para>
|
|
<function>serialize</function> retourne une chaîne de caractères contenant
|
|
une représentation linéaire de n'importe quelle valeur qui
|
|
peut être stockée en PHP. <function>unserialize</function> peut utiliser cette
|
|
chaîne de caractères pour recréer la valeur originale de la variable à
|
|
partir de sa représentation linéaire. Utiliser <function>serialize</function>
|
|
pour sauvegarder un objet conservera toutes ses variables. Ses méthodes ne
|
|
seront pas conservées, seul le nom de la classe le sera.
|
|
</para>
|
|
|
|
<para>
|
|
Afin de pouvoir désérialiser (<function>unserialize</function>) un objet,
|
|
la classe de l'objet doit être définie, pour permettre sa reconstruction.
|
|
En d'autres termes, si vous avez un objet de la classe A et le sérialisez,
|
|
la représentation linéaire obtenue fera référence à la classe A et contiendra toutes
|
|
ses variables. Si vous voulez pouvoir désérialiser cette représentation linéaire dans un
|
|
endroit où la classe A n'est pas définie (dans un autre fichier par exemple),
|
|
alors vous devrez redéclarer la classe A avant de procéder à la désérialisation
|
|
de sa représentation linéaire. Cela peut-être fait, par exemple, en incluant le
|
|
fichier de définition de la classe, ou en utilisant la fonction
|
|
<function>spl_autoload_register</function>.
|
|
</para>
|
|
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// A.php :
|
|
|
|
class A {
|
|
public $one = 1;
|
|
|
|
public function show_one() {
|
|
echo $this->one;
|
|
}
|
|
}
|
|
|
|
// page1.php :
|
|
|
|
include "A.php";
|
|
|
|
$a = new A;
|
|
$s = serialize($a);
|
|
// enregistre $s quelque part où page2.php peut le retrouver
|
|
file_put_contents('store', $s);
|
|
|
|
// page2.php :
|
|
|
|
// nous avons besoin de la définition de la classe
|
|
// pour qu'unserialize() fonctionne
|
|
include "A.php";
|
|
|
|
$s = file_get_contents('store');
|
|
$a = unserialize($s);
|
|
|
|
// appel de show_one() sur l'objet $a, affiche 1
|
|
$a->show_one();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<para>
|
|
Si une application sérialise des objets, il est fortement recommandé, pour son usage
|
|
futur, que l'application inclut les définitions des classes des objets sérialisés
|
|
à chaque page. Ne pas faire ainsi pourrait aboutir à un objet désérialisé sans sa définition
|
|
de classe. PHP donnerait alors à cet objet une classe de type
|
|
<classname>__PHP_Incomplete_Class_Name</classname>, qui n'a pas de méthode, et
|
|
produirait un objet inutile.
|
|
</para>
|
|
|
|
<para>
|
|
Ainsi, dans l'exemple ci-dessus, si <varname>$a</varname> était enregistré dans la session
|
|
en ajoutant une clé à la variable super-globale <varname>$_SESSION</varname>, vous devriez inclure le fichier
|
|
<literal>A.php</literal> dans toutes vos pages, et pas seulement dans
|
|
<filename>page1.php</filename> et <filename>page2.php</filename>
|
|
</para>
|
|
|
|
<para>
|
|
Notez que vous pouvez également utiliser les événements de sérialisation et de désérialisation
|
|
sur un objet en utilisant les méthodes <link linkend="object.sleep">__sleep()</link> et
|
|
<link linkend="object.wakeup">__wakeup()</link>. L'utilisation de
|
|
<link linkend="object.sleep">__sleep()</link> vous permet également de seulement sérialiser
|
|
une partie des propriétés de l'objet.
|
|
</para>
|
|
|
|
</sect1>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|