PHP中的unserialize函數(shù)是一個(gè)十分有用的函數(shù),它可以將字符串表示的 PHP 值轉(zhuǎn)換回 PHP 中的變量。要使用 unserialize 函數(shù),必須先用 serialize() 把變量序列化成一個(gè)字符串。
下面用一個(gè)實(shí)例來(lái)說(shuō)明unserialize函數(shù)的用處。
$serialized = 'a:2:{i:0;s:4:"apple";i:1;s:6:"orange";}'; $array = unserialize($serialized); print_r($array);
輸出結(jié)果為:
Array ( [0] =>apple [1] =>orange )
以上代碼將字符串 $serialized 反序列化成了數(shù)組 $array。其中,字符串 $serialized 是由 serialize 函數(shù)生成的。這里需要注意,serialize 函數(shù)序列化的對(duì)象可以是字符串、整數(shù)、數(shù)組、對(duì)象等類型。反序列化后得到的是和原來(lái)變量相同的類型。
下面再來(lái)一個(gè)更加復(fù)雜的例子。
$class = new stdClass(); $class->name = "John"; $class->age = 20; $serialized_class = serialize($class); echo "Serialized object is: $serialized_class
"; $unserialized_class = unserialize($serialized_class); echo "Unserialized object's name is: " . $unserialized_class->name . "
"; echo "Unserialized object's age is: " . $unserialized_class->age . "
";
輸出結(jié)果為:
Serialized object is: O:8:"stdClass":2:{s:4:"name";s:4:"John";s:3:"age";i:20;} Unserialized object's name is: John Unserialized object's age is: 20
以上代碼就是通過(guò) serialize 函數(shù)將stdClass對(duì)象序列化成了一個(gè)字符串。接著使用 unserialize 函數(shù)將字符串反序列化成對(duì)象。不管你序列化的對(duì)象是字符串、整數(shù)、數(shù)組、對(duì)象等類型,反序列化后都能得到和原來(lái)變量相同的類型。
不過(guò),需要注意的是,加密的字符串字符可能會(huì)包含序列化的代碼,因此在解密時(shí),需要謹(jǐn)慎處理。
總結(jié)一下,unserialize 函數(shù)是一個(gè)可以將字符串表示的 PHP 值轉(zhuǎn)換回 PHP 中的變量的超級(jí)有用的函數(shù)。它的功能強(qiáng)大,可以序列化和反序列化各種類型的變量。