标签:overwrite foreach arrays php
我试图将包含来自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;
}
这是一个个人建议,但是我可以将此代码移到静态方法中,也可以将其移到单独的类中.
标签:overwrite,foreach,arrays,php 来源: https://codeday.me/bug/20191031/1973911.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。