php中迭代器问题求助

步惊云 发布于 2012/11/03 00:20
阅读 434
收藏 0
PHP

在untitled1.php中my是实现了iterator接口,在untitled3.php中实例化li类,并将$one存在session中,通过一个连接,连接到untitled2.php中,并在untitled2.php中继续使用迭代,为什么没有返回值啊

untitled1.php

<?php
class my implements Iterator {
    private $pointer = 0;
    private  $array = array(  );  
 const   FOOT=3;
    private static $long;
    public function __construct(array $array) {
    $this->array=$array;
        $this->pointer = 0;
        self::$long=0;
    }

    function rewind() {
         
        $this->pointer = self::$long;
        self::$long=self::$long+self::FOOT;
        echo $this->pointer;
        //$this->pointer=0;
    }

    function current() {
 
        return $this->array[$this->pointer];
    }

    function key() {
 
        return $this->pointer;
    }

    function next() {
 
        ++$this->pointer;
    }

    function valid() {
    
        return (isset($this->array[$this->pointer])&&($this->pointer-self::$long));
    }
    function __tostring()
    {
        return "sdfas";
    }
}
class li extends my
{
    function __construct (array $array)
    {
        parent::__construct ($array);
    }
    
}
?>

untitled3.php

<?php
session_start();
include("untitled1.php");
$first=array("李少华","少羽","石兰","小虞","我是虞姬");
$one=new li($first);
foreach ($one as $key =>$value)
{
echo $value;
    echo "<br />";
}
$_SESSION["one"]=serialize($one);
foreach ($one as $key =>$value)
{
echo $value;
    echo "<br />";
}
echo '<a href="untitled2.php"> lishoaoahua</a>';
?>

;untitled2.php

<?php
session_start();
include_once("untitled1.php");
 $one=unserialize($_SESSION["one"]);
foreach ($one as $key =>$value)
{
echo $value;//在这里没有反应
    echo "<br />";
}
 ?>

加载中
0
朱__朱
朱__朱

因为你在untitled3.php里面已经迭代完所有的元素了,此时迭代器指针在末尾,你序列化了。然后在untitled2.php里面反序列化得到的迭代器指针还是在末尾,当然什么都遍历不出来了。

另外你的rewind()写的很奇怪,是有特殊需求这么写的么?

步惊云
步惊云
对不起写错了,在untitled3.php页面中只用了一次foreach,没有第二次foreach。我是想弄个翻页(可以查看下一页的功能),你会怎么实现
返回顶部
顶部