<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.enumerations.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.enumerations.serialization.php',
    1 => 'Serialisierung',
    2 => 'Serialisierung',
  ),
  'up' => 
  array (
    0 => 'language.enumerations.php',
    1 => 'Aufz&auml;hlungen (Enum)',
  ),
  'prev' => 
  array (
    0 => 'language.enumerations.listing.php',
    1 => 'Liste mit Werten',
  ),
  'next' => 
  array (
    0 => 'language.enumerations.object-differences.inheritance.php',
    1 => 'Warum Enums nicht erweiterbar sind',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/enumerations.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.enumerations.serialization" class="sect1">
  <h2 class="title">Serialisierung</h2>

  <p class="para">
   Aufzählungen werden anders serialisiert als Objekte. Insbesondere haben sie
   einen neuen Serialisierungscode <code class="literal">&quot;E&quot;</code>, der den Namen des
   Enum-Falls angibt. Die Deserialisierungsroutine ist dann in der Lage,
   diesen Code zu verwenden, um eine Variable auf den vorhandenen
   Singleton-Wert zu setzen. Dadurch ist Folgendes gewährleistet:
  </p>

  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />Suit</span><span style="color: #007700">::</span><span style="color: #0000BB">Hearts </span><span style="color: #007700">=== </span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">serialize</span><span style="color: #007700">(</span><span style="color: #0000BB">Suit</span><span style="color: #007700">::</span><span style="color: #0000BB">Hearts</span><span style="color: #007700">));<br /><br />print </span><span style="color: #0000BB">serialize</span><span style="color: #007700">(</span><span style="color: #0000BB">Suit</span><span style="color: #007700">::</span><span style="color: #0000BB">Hearts</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">// E:11:"Suit:Hearts";<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>


  <p class="para">
   Wenn bei der Deserialisierung kein Enum und kein Fall gefunden wird, der
   mit einem serialisierten Wert übereinstimmt, wird eine Warnung ausgegeben
   und <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurückgegeben.
  </p>

  <p class="para">
   Wenn eine Pure Enum in JSON serialisiert wird, wird ein Fehler ausgelöst.
   Wenn eine Backed Enum in JSON serialisiert wird, wird sie nur durch ihren
   skalaren Wert im entsprechenden Typ dargestellt. Das Verhalten von beiden
   kann durch die Implementierung von <span class="classname"><a href="class.jsonserializable.php" class="classname">JsonSerializable</a></span>
   überschrieben werden.
  </p>

  <p class="para">
   Um Verwechslungen zu vermeiden, unterscheidet sich die Ausgabe bei
   <span class="function"><a href="function.print-r.php" class="function">print_r()</a></span> leicht von der bei Objekten.
  </p>

  <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">enum </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{<br />    case </span><span style="color: #0000BB">Bar</span><span style="color: #007700">;<br />}<br /><br />enum </span><span style="color: #0000BB">Baz</span><span style="color: #007700">: </span><span style="color: #0000BB">int </span><span style="color: #007700">{<br />    case </span><span style="color: #0000BB">Beep </span><span style="color: #007700">= </span><span style="color: #0000BB">5</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">Foo</span><span style="color: #007700">::</span><span style="color: #0000BB">Bar</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">Baz</span><span style="color: #007700">::</span><span style="color: #0000BB">Beep</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Ergibt<br /><br />Foo Enum (<br />    [name] =&gt; Bar<br />)<br />Baz Enum:int {<br />    [name] =&gt; Beep<br />    [value] =&gt; 5<br />}<br />*/<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
  </div>

 </div><?php manual_footer($setup); ?>