PHP的实例编号系统如何工作

时间:2013-11-29 14:39:27

标签: php instance instances

我已经使用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)?

2 个答案:

答案 0 :(得分:7)

实际上,首先创建新实例,然后将其分配给$a,从而销毁先前的实例。因此,在第一行中使用数字1,在第二行中,数字1仍然是“活着的”,因此使用数字2。然后数字1被销毁。然后,在第3行中,数字1再次空闲,因此使用数字1。

答案 1 :(得分:6)

第二次调用后,实例#1已被销毁,因此1再次空闲。 $a当时持有实例#2。 使用第三个电话创建的下一个实例将再次分配#1

第三次通话后第二个实例被破坏。现在使用#1#2再次免费。第四个电话会再次使用#2

依此类推......