簡體   English   中英

PHP的實例編號系統如何工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM