A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-10-12 17:12 编辑

【黑马程序员济南】PHP类其他魔术方法
序列化:
就是将一个变量的“内存数据形式”,转换为“硬盘数据形式”的过程。

分2步就可以:
        1,$str  =  serialize( $变量 );        //该函数将该变量数据,转换为一个字符串
       2,file_put_contents(“文本文件名”,  $str );        //将该字符串保存到该文件中。
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/
//演示3中数据的序列化结果
class A{
    public $p1 = 1;
    protected $p2 = 2;
    private $p3 = 3;
}

$data1 = 1.1;
$data2 = array('aa',5=>5.5,'bbcc'=>true);
$data3 = new A();

//开始转换得到一个字符串
$str1 = serialize($data1);
$str2 = serialize($data2);
$str3 = serialize($data3);

//开始写入硬盘中
file_put_contents('./file1.txt',$str1);
file_put_contents('./file2.txt',$str2);
file_put_contents('./file3.txt',$str3);

[align=left]
反序列化:
       将已经存到硬盘的变量数据,转换(恢复)到内存数据(变量)形式的过程。
同样分2步:
       1,$str = file_get_contents(文本文件名);                //读取出序列化之后所存储的文件内容(就是字符串)
       2,$变量  = unserialize( $str );                                //将该字符串恢复为变量(数据);
[PHP] 纯文本查看 复制代码
<?php[/align]/*黑马程序员济南中心出品*/
//演示3中数据的序列化结果
class A{
    public $p1 = 1;
    protected $p2 = 2;
    private $p3 = 3;
}

//开始从硬盘中读取数据(字符串)
$str1 = file_get_contents('./file1.txt');
$str2 = file_get_contents('./file2.txt');
$str3 = file_get_contents('./file3.txt');

//开始转换得到一个字符串
$data1 = unserialize($str1);
$data2 = unserialize($str2);
$data3 = unserialize($str3);

var_dump($data1);
var_dump($data2);
var_dump($data3);
结果为:
float(1.1)
array(3){[0]=>string(2)"aa" [5]=>float(5.5) ["bbcc"]=>bool(true)}
object(A)#1 (3) {["p1"]=>int(1) ["p2":protected]=>int(2) ["p3":"A":private]=>int(3)}
__sleep()
       该魔术方法是对一个对象进行“序列化”的时候,会被自动调用。
       此时,在该方法中,我们就可以(而且必须)返回一个数组,该数组中含所有我们“想要”对该对象的属性进行序列化的属性名。
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/
class  A{
    public  $p1 = 1;
    protected $p2 = 2;
    private $p3 = 3;
    static  $p4 = 4;
    function  __sleep(){
        //当然,这里也可以做些其他的。。。。
        return  array(“p1”,  “p3”);        //这里,就相当于只选择了p1,p3的数据进行“存盘”
        //p2属性的数据被放弃了
        //p4的属性根本就不能序列
    }
}
  




__wakeup()
       该魔术方法是对一个对象进行“反序列化”的时候,会被自动调用。
       此时,该对象的属性值,就会恢复到“原来的数据”
       但:如果某个属性当时并没有做序列化,则此时就不会恢复为原来对象的数据,而是恢复为该类中的初始数据;
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/
class A{
    public $p1 = 1;
    protected $p2 = 2;
    private $p3 = 3;
    static $p4 = 4;
    function __construct($p1,$p2,$p3){
        $this->p1 = $p1;
        $this->p2 = $p2;
        $this->p3 = $p3;
    }
    function __sleep(){
        return array("p1","p3");
    }
    function __wakeup(){
        echo "对象苏醒了。。。";
    }
}

$s1 = new S(11,12,13);
$str = serialize($s1);
var_dump($)


[align=left]
不知道大家对今天讲的PHP类其他魔术方法相关技术学习的怎么样啊?有什么疑问欢迎来黑马程序员济南中心来咨询哟~

点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈





2 个回复

正序浏览
传智棒棒哒
回复 使用道具 举报
厉害了,之前用到过不知道是魔术方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马