1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-24 07:02:08 +01:00
Files
archived-doc-ja/reference/var/functions/serialize.xml

173 lines
6.7 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: d816a0fad6c458d9515f697cc89e26ca9d8069f5 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi,mumumu -->
<refentry xml:id="function.serialize" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>serialize</refname>
<refpurpose>値の保存可能な表現を生成する</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>serialize</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
値の保存可能な表現を生成します。
</para>
<para>
型や構造を失わずに PHP の値を保存または渡す際に有用です。
</para>
<para>
シリアル化された文字列を PHP の値に戻すには、
<function>unserialize</function> を使用してください。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
シリアル化する値。
<function>serialize</function> は、<type>resource</type>
および一部の <type>object</type> 以外のすべての型を処理します。(下記の注を参照ください)
自分自身への参照を含む配列を
<function>serialize</function> することも可能です。
シリアル化した配列/オブジェクト内の
循環参照も保存されます。その他の参照は失われます。
</para>
<para>
PHP は、シリアル化の前にまずメンバ関数
<link linkend="object.serialize">__serialize()</link> または <link linkend="object.sleep">__sleep()</link>
のコールを試みます。ここで、シリアル化の前のオブジェクトの後始末処理
などを行います。同様に、<function>unserialize</function>
オブジェクトを復元した際にはメンバ関数
<link linkend="object.unserialize">__unserialize()</link> または <link linkend="object.wakeup">__wakeup()</link> がコールされます。
</para>
<note>
<para>
オブジェクトの private メンバは、メンバ名の前にクラス名がつきます。
また protected メンバはメンバ名の前に '*' がつきます。
前に付加されるこれらの値の前後には null バイトがついています。
</para>
</note>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<parameter>value</parameter>
の保存可能なバイトストリーム表現を含む文字列を返します。
</para>
<para>
これはバイナリ文字列であり、null バイトを含む可能性もあることに注意しましょう。
保存したり利用したりするときも、null バイトが含まれることを想定しておかないといけません。
たとえば、<function>serialize</function> の出力をデータベースに格納するときには、
通常は CHAR 型や TEXT 型ではなく BLOB 型を使わないといけません。
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>serialize</function> の例</title>
<programlisting role="php" annotations="non-interactive">
<![CDATA[
<?php
// $session_data はカレントユーザーのセッション情報を含む多次元配列を
// 保持しています。リクエストの最後にこれをデータベースに保存するために
// serialize() を使用します。
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, array_reverse($sqldata))) {
/* 何か問題があったようです.. */
}
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
PHP の組み込みオブジェクトの多くはシリアル化できないことに注意しましょう。しかし、
<interfacename>Serializable</interfacename> インターフェイスを実装しているか、あるいはマジックメソッド
<link linkend="object.serialize">__serialize()</link>/<link linkend="object.unserialize">__unserialize()</link>
または <link linkend="object.sleep">__sleep()</link>/<link linkend="object.wakeup">__wakeup()</link>
を実装していればシリアル化することができます。
内部クラスがこれらの要件を満たしていない場合は、確実にシリアル化することはできません。
</para>
<para>
この規則には歴史的な例外もあり、
上記のインターフェイスやマジックメソッドを実装していない内部オブジェクトの中にも
シリアル化可能なものがあります。
</para>
</note>
<warning>
<para>
<function>serialize</function> でオブジェクトをシリアル化するときに、
名前空間を指定したクラスの名前の先頭にあるバックスラッシュは含めません。これは互換性を高めるためです。
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>unserialize</function></member>
<member><function>var_export</function></member>
<member><function>json_encode</function></member>
<member><link linkend="language.oop5.serialization">オブジェクトのシリアル化</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
-->