Heim > Artikel > Backend-Entwicklung > PHP-Objektserialisierung
Das sogenannte serialisierte Objekt dient zum Speichern des Objekts in der Sitzung
Alle Werte in PHP können mithilfe der Funktion serialize() dargestellt werden, um eine Zeichenfolge zurückzugeben, die einen Bytestream enthält. Die Funktion unserialize() kann den String wieder auf den ursprünglichen Wert von PHP zurücksetzen. Durch die Serialisierung eines Objekts werden alle Variablen des Objekts gespeichert, jedoch nicht die Methoden des Objekts, sondern nur der Klassenname.
Um ein Objekt zu unserialisieren(), muss 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 dem Deserialisieren definiert werden, entweder durch Einschließen einer Datei, die die Klasse definiert, oder durch Verwendung der Funktion spl_autoload_register().
<?php // classa.inc: class A { public $one = 1; public function show_one() { echo $this->one; } } // page1.php: include("classa.inc"); $a = new A; $s = serialize($a); // 把变量$s保存起来以便文件page2.php能够读到 file_put_contents('store', $s); // page2.php: // 要正确了解序列化,必须包含下面一个文件 include("classa.inc"); $s = file_get_contents('store'); $a = unserialize($s); // 现在可以使用对象$a里面的函数 show_one() $a->show_one(); ?>
Wenn eine Anwendung die Funktion session_register() verwendet, um Objekte in der Sitzung zu speichern, werden diese Objekte am Ende jeder Seite automatisch serialisiert und am Anfang jeder Seite erneut deserialisiert. Sobald die Objekte in der Sitzung gespeichert sind, stehen sie den Seiten in der gesamten Anwendung zur Verfügung. Allerdings ist die Funktion session_register() in php5.3.0 veraltet und wird in php6.0.0 nicht mehr unterstützt, also verlassen Sie sich nicht auf diese Funktion.
Um Objekte in Ihrer Anwendung für die spätere Verwendung zu serialisieren, wird dringend empfohlen, in Ihrer Anwendung Objektklassendefinitionen einzubeziehen. Andernfalls ist es möglich, dass beim Deserialisieren eines Objekts die Definition der Klasse des Objekts nicht gefunden wird und die Klasse __PHP_Incomplete_Class_Name ohne Methode als Klasse des Objekts verwendet wird, was dazu führt, dass ein nutzloses Objekt zurückgegeben wird.
Wenn Sie also im obigen Beispiel session_register("a") ausführen und die Variable $a in der Sitzung platzieren, muss die Datei classa.inc in jede Seite eingefügt werden, nicht nur die Datei page1 und page2.php.