php-foreach循环后覆盖数组

我试图将包含来自sql结果集中的元素的对象推入数组.我的代码是这样的:

$data = array();
$sql = "SELECT id,type,name,username FROM users";
foreach ($conn->query($sql) as $row) { 
    $this->set_id($row['id']);
    $this->set_type($row['type']);
    $this->set_username($row['username']);
    $this->set_password($row['password']);

    $data[] = $this;
}

我的结果集是正确的,但是在foreach循环结束后,我的数组单元格被最后一个记录集的值覆盖.例如,当我print_r我的$data数组ouside时,如果我有这些结果{1,’type1′,’user’,’pass’},{2,’type2′,’foo’,’bar’}循环,我只得到第二个结果集重复两次.我究竟做错了什么?

解决方法:

在实例方法中,$this始终引用当前类的实例;在每次循环迭代时,您都要修改实例本身,然后将其添加到$data中;但是在分配时,不会进行复制,而是添加了对同一实例的引用.

最后,您在每个索引处都有一个具有相同对象的数组.

您将需要在每次循环迭代时为您所在类创建一个新实例:

foreach ($conn->query($sql) as $row) { 
    $obj = new self; // create new instance of ourselves

    $obj->set_id($row['id']);
    $obj->set_type($row['type']);
    $obj->set_username($row['username']);
    $obj->set_password($row['password']);

    $data[] = $obj;
}

这是一个个人建议,但是我可以将此代码移到静态方法中,也可以将其移到单独的类中.

上一篇:在Windows下编写并运行第一个ASP.NET 5 Preview Web API程序


下一篇:Python CSV覆盖