php变量与对象的疑问

classa{}
for($i=0;$i<3;$i++){
$a=newa;
var_dump($a);
echo"
";
}
输出结果:
object(a)#1(0){}
object(a)#2(0){}
object(a)#1(0){}
我想问为什么是#1,#2,#1呢?
守着星空守着你
浏览 295回答 2
2回答

凤凰求蛊

#1中数字的含义是实例ID(instanceid),即类被实例化之后对应的编号,又称为对象编号。PHP自动垃圾回收,使用“引用计数”的方式去确定是否销毁变量,官网有非常详细的解释。你的问题不在于对象使用,而在于如何对$a进行计数,第一次循环,变量$a计数为1,指向#1对象,第二次循环由于已经脱离了第一次循环$a的作用域(精英王子·3小时前:『第二次循环由于已经脱离了第一次循环$a的作用域』的说法不正确,PHP里面循环是不会创建新的作用域的,销毁第一次的$a是因为它被重新赋值。),所以经历了创建对象#2、销毁第一次创建的$a、创建第二次$a、赋值对象#2给$a、清空对象#1几个步骤,很遗憾我水平难以讲明白他们之间细微的前后关系。但值得肯定的是对象#2创建时,第一次循环的#1还尚未销毁,否则他就会以#1为编号了。因为主要是变量作用域、计数的问题,所以跟unset差不多的帮助理解的方式://给变量命不同的名,不让它们在循环结束之前涉及到计数和销毁的问题for($i=0;$i
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript