标签:loops memory php-7-1 php class
我通过循环创建了一堆基本类的实例.
每次迭代时,我都将实例添加(通过引用而不是复制)到数组中.
为什么在循环之后,数组中的每个引用都指向最后创建的实例?
进行未设置似乎可以解决此问题,但是我认为这不是理想的选择,并且可能会从内存中取消设置基础实例.
<?php
//foobars remembers something
class FOOBAR{
public $val;
public function __construct(&$input){
$this->val = $input;
}
};
//after creating foobars, pass them to a list
$list1 = [];
for($i=1; $i<=5; $i++){
//create an instance of foobar
$random = rand(1, 10);
$instance = new FOOBAR($random);
$list1[] = &$instance;
// Using unset (below) fixes it?
//unset($instance);
}
//show what our foobars remembered
var_dump(json_encode($list1));
?>
解决方法:
这是你的问题:
$list1[] = &$instance;
数组中的项目包含对$instance变量的引用.一旦更改了该变量(在您的情况下为循环的下一次迭代中),数组中的项目就会引用新创建的项目.
因此,循环之后,数组中的所有条目都引用了您创建的最后一个对象.
你需要:
$list1[] = $instance;
标签:loops,memory,php-7-1,php,class 来源: https://codeday.me/bug/20191025/1927180.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。