Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse mehrerer Serialisierungsbeispiele in PHP

Analyse mehrerer Serialisierungsbeispiele in PHP

小云云
小云云Original
2018-02-12 09:52:361066Durchsuche

Serialisierung ist der Prozess der Konvertierung einer Variablen in eine Zeichenfolge, die gespeichert oder übertragen werden kann. Bei der Deserialisierung wird die Zeichenfolge in die ursprüngliche Variable umgewandelt, damit sie zum richtigen Zeitpunkt verwendet werden kann. Durch die Kombination dieser beiden Prozesse können Daten einfacher gespeichert und übertragen werden. Dieser Artikel führt Sie hauptsächlich in die detaillierte Erklärung verschiedener Serialisierungs-/Deserialisierungsmethoden in PHP ein und geben Sie es als Referenz an. Folgen wir dem Herausgeber, um einen Blick darauf zu werfen. Ich hoffe, es kann allen helfen.

1. Serialisierungs- und Deserialisierungsfunktionen

Diese beiden sind gängige Funktionen zum Serialisieren und Deserialisieren von Daten in PHP.


<?php
 
$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
 
//序列化数组
 
$s = serialize($a);
 
echo $s;
 
//输出结果:a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}
 
echo &#39;<br /><br />&#39;;
 
//反序列化
 
$o = unserialize($s);
 
print_r($o);
 
//输出结果 Array ( [a] => Apple [b] => banana => Coconut )
 
?>


//反序列化
$o = unserialize($s);
print_r($o);
//输出结果 Array ( [a] => Apple [b] => banana => Coconut )
?>

Wenn Array-Werte Zeichen wie doppelte Anführungszeichen, einfache Anführungszeichen oder Doppelpunkte enthalten, werden sie anschließend deserialisiert Oxidation kann es zu Problemen kommen. Um dieses Problem zu lösen, besteht ein netter Trick darin, base64_encode und base64_decode zu verwenden.


$obj = array();
//序列化
$s = base64_encode(serialize($obj));
//反序列化
$original = unserialize(base64_decode($s));

Aber die Base64-Kodierung erhöht die Länge der Zeichenfolge. Um dieses Problem zu lösen, kann es mit gzcompress verwendet werden.


//定义一个用来序列化对象的函数
 function my_serialize( $obj )
{
  return base64_encode(gzcompress(serialize($obj)));
}
//反序列化
function my_unserialize($txt)
{
  return unserialize(gzuncompress(base64_decode($txt)));
}

2. json_encode und json_decode

Die Verwendung der Serialisierung und Deserialisierung im JSON-Format ist eine gute Wahl:

Mit den Formaten json_encode und json_decode ist die Ausgabe viel schneller als mit dem Serialisierungs- und Deserialisierungsformat.

JSON-Format ist lesbar.

Das JSON-Format gibt kleinere Daten zurück als die Serialisierung.

Das JSON-Format ist offen und portierbar. Andere Sprachen können es ebenfalls verwenden.


$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
//序列化数组
$s = json_encode($a);
echo $s;
//输出结果:{"a":"Apple","b":"banana","c":"Coconut"}
echo &#39;<br /><br />&#39;;
//反序列化
$o = json_decode($s);

Im obigen Beispiel ist die Ausgabelänge von json_encode offensichtlich kürzer als die Ausgabelänge von serialize im vorherigen Beispiel.

3. var_export und eval

var_export-Funktion gibt die Variable als String aus; eval führt den String als PHP-Code aus und deserialisiert, um den ursprünglichen Variableninhalt zu erhalten.


 $a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
 
//序列化数组
 
$s = var_export($a , true);
 
echo $s;
 
//输出结果: array ( &#39;a&#39; => &#39;Apple&#39;, &#39;b&#39; => &#39;banana&#39;, &#39;c&#39; => &#39;Coconut&#39;, )
 
echo &#39;<br /><br />&#39;;
 
//反序列化
 
eval(&#39;$my_var=&#39; . $s . &#39;;&#39;);
 
print_r($my_var);

4. wddx_serialize_value und wddx deserialize

wddx_serialize_value-Funktion kann Array-Variablen serialisieren und als XML-Strings-Ausgabe formatieren.


$a = array(&#39;a&#39; => &#39;Apple&#39; ,&#39;b&#39; => &#39;banana&#39; , &#39;c&#39; => &#39;Coconut&#39;);
 
//序列化数组
$s = wddx_serialize_value($a);
echo $s;
 
//输出结果(查看输出字符串的源码):<wddxPacket version=&#39;1.0&#39;><header/><data><struct><var name=&#39;a&#39;><string>Apple</string></var><var name=&#39;b&#39;><string>banana</string></var><var name=&#39;c&#39;><string>Coconut</string></var></struct></data></wddxPacket>
 
echo &#39;<br /><br />&#39;;
 
//反序列化
$o = wddx_deserialize($s);
print_r($o);
//输出结果:Array ( [a] => Apple [b] => banana 1 => Coconut )

Es ist ersichtlich, dass es viele XML-Tag-Zeichen gibt, sodass die Serialisierung dieses Formats immer noch viel Platz einnimmt.

Zusammenfassung

Alle oben genannten Funktionen können beim Serialisieren von Array-Variablen normal ausgeführt werden, bei der Anwendung auf Objekte ist dies jedoch anders. Beispielsweise schlagen serialisierte json_encode-Objekte fehl. Beim Deserialisieren von Objekten haben Deserialisieren und Auswerten unterschiedliche Auswirkungen.

Verwandte Empfehlungen:

JS-Methode zur Implementierung der Formularserialisierung zur Bestimmung des Nullwerts

Informationen zur PHP-Datensequenz Testen Sie

jQuery-Formularserialisierungsbeispiel, Code-Beispielfreigabe

Das obige ist der detaillierte Inhalt vonAnalyse mehrerer Serialisierungsbeispiele in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn