2011-01-20 36 views

回答

1

在Ruby on Rails中,它總是取決於範圍和定義的位置。

例如,您的環境和配置文件中定義的對象/實例變量將始終保留。一個簡單的例子就是ActiveMerchant支付網關,它是在environment.rb文件中定義的,並且適用於每個請求。

在控制器的情況下,它僅針對該HTTP請求,對象和實例變量。

1

它存在於其範圍內。如果它是一個全球性的話,只要會議結束就會存在。但是,如果它不是全球性的,那麼在您將範圍留在現有範圍後,它就不會存在。

2

在PHP中,它取決於什麼版本。考慮到PHP4不久之前,我只會談論5.2和5.3:是的,變量確實需要存儲在會話或其他持久機制(memcached,數據庫,文件等)中以保持跨請求。並且最長的本地PHP變量可以持續的是當前請求的長度(並且其結束部分都被清除)。

在PHP的兩個版本:

實例變量,只要有變量引用它們依然存在。 PHP內部存儲每個對象的引用計數。當一個變量超出範圍時,PHP減少refcount並檢查0。如果它爲0,它會清理實例並銷燬該對象。

在PHP 5.0,5.1和5.2:

可變清理是naieve。這意味着如果你有一個循環引用(A類持有B類的一個實例,反之亦然),該對象將永遠不會被清除,除非這些引用中的一個被釋放。

在PHP 5.3:

PHP引入相當智能的垃圾收集器的循環引用的確切原因。它可以被關閉,或手動激活。只要它的根計數已滿或者計數減少到非零數字,它就會運行。