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

 懿切瀡纟彖_639 发布于 2023-02-13 19:08

我已经使用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 个回答
  • 第二次调用后,实例#1已经被销毁,因此1再次被释放. 当时$a持有实例#2.将使用您的第三个呼叫创建的下一个实例#1再次分配.

    第三次通话后,第二个实例被破坏.现在#1使用并#2再次变得自由.第四次通话将#2再次使用.

    等等等等…

    2023-02-13 19:10 回答
  • 实际上,首先创建新实例然后分配给它$a,销毁前一个实例.因此,在第一行中使用数字1,在第二行中,数字1仍然是"活着的",因此使用数字2.然后数字1被销毁.然后,在第3行中,数字1再次空闲,因此使用数字1.

    2023-02-13 19:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有