实例变量会持续多长时间?在 Rails 中?在爪哇?在 PHP 中?

2023-11-29

如果我实例化一个类并在 Rails 控制器或模型使用的 Ruby 模块中设置实例变量,该实例变量会持续多长时间?变量是否需要显式存储在会话中才能在请求之间保留?

Rails 在这方面与 Java 或 PHP 相比如何?


在 PHP 中,这取决于什么版本。考虑到 PHP4 刚刚发布,我只讨论 5.2 和 5.3:是的,变量确实需要存储在会话或其他持久机制(memcached、数据库、文件等)中才能跨请求持久保存。本机 PHP 变量可以持续的最长时间是当前请求的长度(以及所有内容都被清理干净的末尾)。

在 PHP 的两个版本中:

只要有变量引用实例变量,它们就会一直存在。 PHP 在内部存储每个对象的引用计数。当变量超出范围时,PHP 会减少引用计数并检查是否为 0。如果为 0,则会清理实例并销毁对象。

在 PHP 5.0、5.1 和 5.2 中:

变量清理很幼稚。这意味着,如果您有循环引用(A 类持有 B 类的实例,反之亦然),则除非释放这些引用之一,否则该对象将永远不会被清理。

在 PHP 5.3 中:

出于循环引用的确切原因,PHP 引入了一个相当智能的垃圾收集器。它可以关闭,也可以手动激活。只要其根计数已满或引用计数减少到非零数字,它就会运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实例变量会持续多长时间?在 Rails 中?在爪哇?在 PHP 中? 的相关文章

随机推荐