PHP Generator::__wakeup() 方法

返回上一级

PHP Generator::__wakeup 用于在反系列一个对象时调用。

( PHP 5 >= 5.5.0, PHP 7 )

其实,迭代器是不能被序列化和反序列化的。不知道为啥实现了这个方法有什么用。

方法原型

public void Generator::__wakeup ( void )

该方法会在反系列化时自动调用,也就是在调用 unserialize() 函数反序列化一个函数时自动调用。

有意思的是,Generator 类竟然实现了 __wakeup() 方法而没有实现 __sleep() 方法。

如果一个生成器不能被序列化,那么将抛出一个异常。

其实,迭代器是不能被序列化和反序列化的。不知道为啥实现了这个方法有什么用。

范例

我们写一个范例来演示下生成器的序列化于反序列化。会抛出一个异常。

<?php

function gen_zero_to_ten() {
    for ($i = 1; $i <= 10; $i++) {
        yield $i;
    }
}

$generator = gen_zero_to_ten();
echo "current value is: ",$generator->current();

// 调用了 next() 方法,所以下一次调用 current() 应该输出 2 
$generator->next();

// 序列化
$gen_s = serialize( $generator );

// 反序列化
$gen  = unserialize( $gen_s );

echo "current value is: ",$generator->current();

运行结果如下

current value is: 1
Fatal error: Uncaught Exception: Serialization of 'Generator' is not allowed 

从运行结果中可以看出,生成器是不能被序列化和反序列化的。

返回上一级

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.