我已经使用PHP很多年了,但有一部分我从未真正了解过,并且最近一直在想.
当我执行以下操作时:
var_dump(new test()); var_dump(new test()); var_dump(new test()); var_dump(new test());
我明白了:
object(test)[1] object(test)[1] object(test)[1] object(test)[1]
所有这些对象都具有相同的编号.我得知系统没有将实例分配给变量,因此它几乎立即被破坏.但是当我做以下事情时:
var_dump($a = new test()); var_dump($a = new test()); var_dump($a = new test()); var_dump($a = new test()); var_dump($a = new test()); var_dump($a = new test());
我明白了:
object(test)[1] object(test)[2] object(test)[1] object(test)[2] object(test)[1] object(test)[2]
正如你所看到的,第一个是1,然后第二个是2,但是它循环而不是坚持2.
我猜测应用第一个实例的变量会被第二个调用中的新实例覆盖(从而破坏它),但是为什么第三个调用会在分配之前破坏第二个实例(将实例增量返回到1) ?
第二次调用后,实例#1
已经被销毁,因此1再次被释放.
当时$a
持有实例#2
.将使用您的第三个呼叫创建的下一个实例#1
再次分配.
第三次通话后,第二个实例被破坏.现在#1
使用并#2
再次变得自由.第四次通话将#2
再次使用.
等等等等…
实际上,首先创建新实例然后分配给它$a
,销毁前一个实例.因此,在第一行中使用数字1,在第二行中,数字1仍然是"活着的",因此使用数字2.然后数字1被销毁.然后,在第3行中,数字1再次空闲,因此使用数字1.