Heim  >  Artikel  >  Backend-Entwicklung  >  php serialize()与unserialize()的用法

php serialize()与unserialize()的用法

WBOY
WBOYOriginal
2016-06-20 12:28:111023Durchsuche

serialize()和unserialize()在php手册上的解释是:

serialize — Generates a storable representation of a value

serialize — 产生一个可存储的值的表示

unserialize — Creates a PHP value from a stored representation

unserialize — 从已存储的表示中创建 PHP 的值

<?php//声明一个类class dog {    var $name;    var $age;    var $owner;    function dog($in_name="unnamed",$in_age="0",$in_owner="unknown") {        $this->name = $in_name;        $this->age = $in_age;        $this->owner = $in_owner;    }    function getage() {        return ($this->age * 365);    }    function getowner() {        return ($this->owner);    }    function getname() {        return ($this->name);    }}//实例化这个类$ourfirstdog = new dog("Rover",12,"Lisa and Graham");//用serialize函数将这个实例转化为一个序列化的字符串$dogdisc = serialize($ourfirstdog);print $dogdisc; //$ourfirstdog 已经序列化为字符串 O:3:"dog":3:{s:4:"name";s:5:"Rover";s:3:"age";i:12;s:5:"owner";s:15:"Lisa and Graham";}print '<BR>';/* -----------------------------------------------------------------------    在这里你可以将字符串 $dogdisc 存储到任何地方如 session,cookie,数据库,php文件 -----------------------------------------------------------------------*///我们在此注销这个类unset($ourfirstdog);/*    还原操作   *//* -----------------------------------------------------------------------    在这里将字符串 $dogdisc 从你存储的地方读出来如 session,cookie,数据库,php文件 -----------------------------------------------------------------------*///我们在这里用 unserialize() 还原已经序列化的对象$pet = unserialize($dogdisc); //此时的 $pet 已经是前面的 $ourfirstdog 对象了//获得年龄和名字属性$old = $pet->getage();$name = $pet->getname();//这个类此时无需实例化可以继续使用,而且属性和值都是保持在序列化之前的状态print "Our first dog is called $name and is $old days old<br>";print '<BR>';?>

其实serialize()就是将PHP中的变量如对象(object),数组(array)等等的值序列化为字符串后存储起来.序列化的字符串我们可以存储在其他地方如数据库、Session、Cookie等,序列化的操作并不会丢失这些值的类型和结构。这样这些变量的数据就可以在PHP页面、甚至是不同PHP程序间传递了。而unserialize()就是把序列化的字符串转换回PHP的值。当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,可为 integer、float、string、array 或 object。如果传递的字符串不可解序列化,则返回 FALSE。

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