[英]How PHP's instance numbering system works
我已經使用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) ?
實際上,首先創建新實例,然后將其分配給$a
,銷毀前一個實例。 因此,在第一行中使用數字1,在第二行中,數字1仍然是“活着的”,因此使用數字2。 然后數字1被銷毀。 然后,在第3行中,數字1再次空閑,因此使用數字1。
第二次調用后,實例#1
已經被銷毀,因此1再次被釋放。 $a
當時持有#2
實例。 使用第三個呼叫創建的下一個實例將再次分配#1
。
第三次通話后,第二個實例被破壞。 現在使用#1
, #2
再次免費。 第四個呼叫將再次使用#2
。
等等等等…
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.