Files
doc-fr/reference/igbinary/functions/igbinary-serialize.xml
2022-06-05 13:25:34 +01:00

160 lines
6.1 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: aa19c140e6be8b9c324c32ace850dfc2911891a2 Maintainer: moradZahid Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.igbinary-serialize" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>igbinary_serialize</refname>
<refpurpose>Génère une représentation binaire stockable et compacte d'une valeur</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>string</type><type>false</type></type><methodname>igbinary_serialize</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
Génère une représentation stockable d'une valeur.
</para>
<para>
C'est une technique pratique pour stocker ou passer des valeurs PHP entre scripts, sans perdre leur structure ni leur type.
</para>
<para>
Pour reconvertir la chaîne de caractères linéarisée en une valeur PHP,
la fonction <function>igbinary_unserialize</function> peut être utilisée.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
La valeur à linéariser. <function>igbinary_serialize</function>
gère tous les types sauf les <type>ressource</type>s et certains <type>objet</type>s (confère la note ci-dessous).
Il est possible de linéariser avec <function>igbinary_serialize</function> un &array; qui contient des références sur lui-même.
Les références circulaires à l'intérieur d'un &array; ou d'un &object; à linéariser seront également stockées.
Toute autre référence sera perdue.
</para>
<para>
Lorsqu'il linéarise des objets, igbinary tentera d'appeler les méthodes magiques
<link linkend="object.serialize">__serialize()</link> ou
<link linkend="object.sleep">__sleep()</link> avant la linéarisation.
Cela permettra à l'objet de faire un nettoyage de dernière minute, etc., avant d'être linéarisé.
De même, lorsque l'objet est restauré en utilisant la fonction
<function>igbinary_unserialize</function>, une des méthodes magiques <link linkend="object.unserialize">__unserialize()</link>
ou <link linkend="object.wakeup">__wakeup()</link> est appelée.
</para>
<note>
<para>
Les attributs privés d'un objet auront le nom de la classe préfixé au nom de l'attribut;
les attributs protégés seront préfixés avec un astérisque <literal>'*'</literal>.
Ces valeurs préfixées ont des caractères nuls des deux cotés.
</para>
</note>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Retourne une chaîne de caractères contenant une représentation du paramètre <parameter>value</parameter>
sous forme de flux d'octets qui peut être stocké à n'importe quel endroit.
</para>
<para>
Il est à noter que c'est une chaîne binaire qui peut inclure des caractères nuls, et doit donc être stockée et gérée comme telle.
Par exemple, dans une base de données, la sortie de la fonction <function>igbinary_serialize</function>
doit, en général, être stockée dans un champ de type <literal>BLOB</literal>
plutôt que dans un champ de type <literal>CHAR</literal> ou <literal>TEXT</literal>.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>igbinary_serialize</function> example</title>
<title>Exemple avec <function>igbinary_serialize</function></title>
<programlisting role="php">
<![CDATA[
<?php
$ser = igbinary_serialize(['test', 'test']);
echo urlencode($ser), "\n";
var_export(igbinary_unserialize($ser));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
%00%00%00%02%14%02%06%00%11%04test%06%01%0E%00
array (
0 => 'test',
1 => 'test',
)
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Il est à noter que de nombreux objets internes de PHP ne peuvent pas être linéarisés. Cependant, ceux qui le peuvent
implémentent soit l'interface <interfacename>Serializable</interfacename> soit les méthodes magiques
<link linkend="object.serialize">__serialize()</link>/<link linkend="object.unserialize">__unserialize()</link>
ou <link linkend="object.sleep">__sleep()</link>/<link linkend="object.wakeup">__wakeup()</link>.
Si une classe interne ne remplit aucune de ces conditions, elle ne peut pas être linéarisée de manière fiable.
</para>
<para>
Il existe des exceptions historiques à cette règle, où des objets internes peuvent être linéarisés
sans implémenter ni l'interface ni les méthodes magiques.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>serialize</function></member>
<member><function>igbinary_unserialize</function></member>
<member><function>var_export</function></member>
<member><function>json_encode</function></member>
<member><link linkend="language.oop5.serialization">Linéarisation d'objets</link></member>
<member><link linkend="object.sleep">__sleep()</link></member>
<member><link linkend="object.wakeup">__wakeup()</link></member>
<member><link linkend="object.serialize">__serialize()</link></member>
<member><link linkend="object.unserialize">__unserialize()</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->