Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung und Vergleich verschiedener Serialisierungen in PHP

Zusammenfassung und Vergleich verschiedener Serialisierungen in PHP

黄舟
黄舟Original
2017-03-29 10:09:491219Durchsuche

Serialisierung ist der Prozess der Konvertierung einer Variable in eine Zeichenfolge, die gespeichert oder übertragen werden kann; bei der Deserialisierung wird diese Zeichenfolge zum richtigen Zeitpunkt in die Originalvariable umgewandelt. Durch die Kombination dieser beiden Prozesse können Daten einfach gespeichert und übertragen werden, wodurch das Programm leichter wartbar wird. Schauen wir uns den Vergleich verschiedener Serialisierungen in PHP an.

Vorwort

Serialisierung ist die Umwandlung eines ObjektsZustands in einen dauerhaften oder transportierbaren Formatierungsprozess . Das Gegenteil der Serialisierung ist die Deserialisierung, die einen Stream in ein Objekt umwandelt. Diese beiden Prozesse werden kombiniert, um Daten einfach zu speichern und zu übertragen.

Der Prozess der Umwandlung der Zustandsinformationen eines Objekts in eine Form, die gespeichert oder übertragen werden kann. Bei der Serialisierung schreibt ein Objekt seinen aktuellen Zustand in den temporären oder dauerhaften Speicher. Später kann das Objekt neu erstellt werden, indem der Status des Objekts aus dem Speicher gelesen oder deserialisiert wird.

Normalerweise werden alle Felder einer Objektinstanz serialisiert, was bedeutet, dass die Daten als serialisierte Daten der Instanz dargestellt werden. Auf diese Weise kann Code, der das Format interpretieren kann, möglicherweise den Wert der Daten bestimmen, ohne auf die Zugänglichkeit des Mitglieds angewiesen zu sein. In ähnlicher Weise extrahiert die Deserialisierung Daten aus der serialisierten Darstellung und legt den Objektstatus direkt fest, wiederum unabhängig von Barrierefreiheitsregeln. Jedes Objekt, das wichtige Sicherheitsdaten enthalten kann, sollte nach Möglichkeit nicht serialisierbar gemacht werden. Wenn es serialisierbar sein muss, versuchen Sie, bestimmte Felder zu generieren, um wichtige Daten aufzunehmen, die nicht serialisierbar sind. Wenn dies nicht möglich ist, sollten Sie sich darüber im Klaren sein, dass die Daten jedem Code mit Serialisierungsberechtigungen ausgesetzt werden, und sicherstellen, dass kein bösartiger Code diese Berechtigung erhält.

Serialisieren und DeserialisierenFunktionen

Diese beiden sind Serialisierung und Deserialisierung von Daten in PHP Häufig verwendete Funktionen. Günstig zum Speichern oder Übergeben von PHP-Werten, ohne deren Typ und Struktur zu verlieren.

<?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 [c] => Coconut )

?>

Probleme können auftreten, wenn Array-Werte nach der Deserialisierung Zeichen wie doppelte Anführungszeichen, einfache Anführungszeichen oder Doppelpunkte enthalten. 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));

但是base64编码将增加字符串的长度。为了克服这个问题,可以和gzcompress一起使用。

//定义一个用来序列化对象的函数

function my_serialize( $obj )
{
 return base64_encode(gzcompress(serialize($obj)));
}

//反序列化
function my_unserialize($txt)
{
 return unserialize(gzuncompress(base64_decode($txt)));
}

json_encode und json_decode

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

Die Ausgabe mit den Formaten json_encode und json_decode ist viel schneller als mit den Formaten serialize und unserialize.

(1) Das JSON-Format ist lesbar.

(2) Das Format von JSON ist kleiner als das zurückgegebene Datenergebnis von serialize.

(3) JSONDas 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 json_encode offensichtlich kürzer als die Ausgabelänge serialize im vorherigen Beispiel. Es ist zu beachten, dass json_encode keine Objekte serialisieren kann.

Zusammenfassung

Das obige ist der detaillierte Inhalt vonZusammenfassung und Vergleich verschiedener Serialisierungen 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