Heim >Backend-Entwicklung >PHP-Tutorial >PHP implementiert mehrere Serialisierungs-/Deserialisierungsmethoden
In diesem Artikel wird hauptsächlich die Implementierung verschiedener Serialisierungs-/Deserialisierungsmethoden in PHP vorgestellt. Ich hoffe, dass er für alle hilfreich ist.
Zusammenfassung: Bei der Serialisierung wird eine Variable in eine Zeichenfolge umgewandelt, die gespeichert oder übertragen werden kann. Bei der Deserialisierung wird diese Zeichenfolge zum richtigen Zeitpunkt in die ursprüngliche Variable umgewandelt. Die Kombination dieser beiden Prozesse erleichtert das Speichern und Übertragen von Daten und macht Programme wartbarer.
Serialisierung ist der Prozess der Konvertierung von Variablen in Zeichenfolgen, die gespeichert oder übertragen werden können. Bei der Deserialisierung wird diese Zeichenfolge in die ursprüngliche Variable umgewandelt und verwenden Sie es bei Bedarf. Durch die Kombination dieser beiden Prozesse können Daten einfach gespeichert und übertragen werden, wodurch das Programm leichter wartbar wird.
1. Serialisierungs- und Deserialisierungsfunktionen
Diese beiden sind gängige Funktionen zum Serialisieren und Deserialisieren von Daten in PHP.
<?php $a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $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 '<br /><br />'; //反序列化 $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, Sie sind Nach der Deserialisierung können Probleme auftreten. 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('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = json_encode($a); echo $s; //输出结果:{"a":"Apple","b":"banana","c":"Coconut"} echo '<br /><br />'; //反序列化 $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('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = var_export($a , true); echo $s; //输出结果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', ) echo '<br /><br />'; //反序列化 eval('$my_var=' . $s . ';'); print_r($my_var);
4. wddx_serialize_value und wddx deserialize
wddx_serialize_value-Funktion kann Array-Variablen serialisieren und in XML-Strings konvertieren Ausgabe.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut'); //序列化数组 $s = wddx_serialize_value($a); echo $s; //输出结果(查看输出字符串的源码):<wddxPacket version='1.0'><header/><data><struct><var name='a'><string>Apple</string></var><var name='b'><string>banana</string></var><var name='c'><string>Coconut</string></var></struct></data></wddxPacket> echo '<br /><br />'; //反序列化 $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.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich sein wird.
PHP-DatenSerialisierungTestdetails
Verwenden Sie native js, um FormularformSerialisierung (grafisches Tutorial)
Das obige ist der detaillierte Inhalt vonPHP implementiert mehrere Serialisierungs-/Deserialisierungsmethoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!