Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Methoden der PHP-Serialisierung gibt es?

Welche Methoden der PHP-Serialisierung gibt es?

青灯夜游
青灯夜游Original
2021-07-08 15:21:006157Durchsuche

PHP-Serialisierungsmethode: 1. Verwenden Sie die Funktion serialize(), Syntax „serialize(value)“; 2. Verwenden Sie die Funktion „base64_encode()“; 3. Verwenden Sie die Funktion „var_export()“;

Welche Methoden der PHP-Serialisierung gibt es?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

Szenario:

Cookies können keine Daten in zusammengesetzter Form speichern, daher muss ein mehrdimensionales Array serialisiert und serialisiert werden Im Cookie gespeichert. Allerdings ist die PHP-Version zu niedrig (5.2) und unterstützt nicht json_encode. Lösung (Serialisierung und Deserialisierung):

1. Die Serialisierungs- und Deserialisierungsfunktionen unterstützen nur eine -dimensionale Arrays. Es wird gesagt, dass die Unterstützung für Objekte besser ist, json_encode unterstützt keine Objekte

Alle Werte in PHP können mit der Funktion serialize(), der Serialisierung, in eine Zeichenfolge konvertiert werden, die gespeichert werden kann. Die Funktion unserialize() kann die Zeichenfolge wieder auf den ursprünglichen Wert von PHP zurücksetzen, was einer Deserialisierung entspricht. Nehmen Sie ein Objekt als Beispiel. Wenn ein Objekt serialisiert wird, werden alle Variablen des Objekts gespeichert, aber die Methoden des Objekts werden nicht gespeichert. Nur der Name der Klasse wird gespeichert. Um ein Objekt deserialisieren zu können, muss außerdem die Klasse des Objekts definiert worden sein. Wenn Sie ein Objekt der Klasse A serialisieren, wird eine auf Klasse A bezogene Zeichenfolge zurückgegeben, die die Werte aller Variablen im Objekt enthält.

Wenn Sie ein Objekt in einer anderen Datei deserialisieren möchten, muss die Klasse des Objekts vor der Deserialisierung definiert werden. Dies kann erreicht werden, indem Sie eine Datei einbinden, die die Klasse definiert, oder die Funktion spl_autoload_register() verwenden. Das Syntaxformat der Funktion

serialize() lautet wie folgt:

serialize(mixed $value)

wobei $value die zu serialisierende Variable ist. Die Funktion

serialize() kann jeden Typ außer Ressource verarbeiten. Beim Serialisieren eines Objekts ruft PHP vor der Sequenzaktion die Memberfunktion __sleep() des Objekts auf. Dadurch können alle Bereinigungsvorgänge durchgeführt werden, bevor das Objekt serialisiert wird. Wenn ein Objekt mit unserialize() deserialisiert wird, wird in ähnlicher Weise die Memberfunktion __wakeup() aufgerufen.

Nachdem Sie die Funktion serialize() zum Serialisieren des Objekts verwendet haben, können Sie die resultierende Zeichenfolge in einer Datei oder Datenbank speichern und dann die Funktion unserialize() verwenden, um die Zeichenfolge bei Bedarf zu deserialisieren.

2, base64_encode und base64_decode

, das gleiche Problem, mehrdimensional wird nicht unterstützt, bei Verwendung erhöht die Base64-Codierung die Länge der Zeichenfolge. Um dieses Problem zu lösen, können Sie es mit gzcompress verwenden:
function my_serialize( $obj )
{
  return base64_encode(gzcompress(serialize($obj)));
}

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

3. var_export und eval

$look_books = array($aid => array($cid => array('article_name' => $article->articlename, 'chapter_name' => $chapter->chaptername))) + $look_books;
            $look_books = var_export($look_books, true);
            setcookie('look_books', $look_books, $cookieTime, '/', '.dym.com');

unterstützen mehrdimensionale Arrays, es ist jedoch zu beachten, dass einfache und doppelte Anführungszeichen Escape-Zeichen haben, was zu eval führt fehlschlagen und die Escape-Zeichen müssen entfernt werden

stripcslashes() 即可。

4. wddx_serialize_value und wddx deserialize

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
  
//序列化数组
$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 )

Auf diese Weise nimmt das XML-Tag selbst zu viele Zeichen und mehr Speicher ein. Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWelche Methoden der PHP-Serialisierung gibt es?. 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