while循环改变php中的对象属性

时间:2013-11-25 04:36:10

标签: php class while-loop this

我得到这个循环到我的foto类里面的listByEvent函数来检索我的db fotos:

    while ($fetch_query = mysql_fetch_assoc($get_foto)) {

        $this -> idFoto = $fetch_query['idFoto'];
        $this -> arquivo = $fetch_query['arquivo'];
        $this -> legenda = $fetch_query['legenda'];
        $this -> idEvento = $fetch_query['idEvento'];
        $this -> curtidas = $fetch_query['curtidas'];
        $this -> naocurtidas = $fetch_query['naocurtidas'];
        $fotos[] = $this;

    }
             return $fotos;

然后在我的视图(show.php)中,我调用这样的方法:

                $foto = new foto();
                $foto -> idEvento = $key -> idEvento;
                $fotos = $foto -> listByEvent();
                foreach ($fotos as $fotokey) {
                                    //here i proper format the layout
                                     }

但是while循环不能覆盖$ this属性,它总是检索相同的foto。如果我改变fc来调用一个新的obj,就像这样:

            while ($fetch_query = mysql_fetch_assoc($get_foto)) {

        $jack = new foto();
        $jack -> idFoto = $fetch_query['idFoto'];
        $jack -> arquivo = $fetch_query['arquivo'];
        $jack -> legenda = $fetch_query['legenda'];
        $jack -> idEvento = $fetch_query['idEvento'];
        $jack -> curtidas = $fetch_query['curtidas'];
        $jack -> naocurtidas = $fetch_query['naocurtidas'];
        $fotos[] = $jack;

    }
            return $fotos;

比它有效。任何人都可以解释为什么我不能在while循环上覆盖这些方法?谢谢你的时间

2 个答案:

答案 0 :(得分:1)

分配类对象时,不进行复制,只需指定对象的引用即可。因此,在第一个循环中,所有数组元素都引用相同的$this对象,每次循环时都会对其进行修改。您需要使用new来创建新对象,以便数组元素是不同的。

答案 1 :(得分:0)

this 指针是一个只能在类,结构或联合类型的非静态成员函数中访问的指针。它指向调用成员函数的对象。 静态成员函数没有此指针。

因此指针返回相同的值。

因此,您需要创建一个新对象来保存值。这就是它在第二次循环中工作的原因。