什么时候PHP对象死了?

时间:2013-10-12 16:51:29

标签: php object

我开始使用PHP中的对象,我想知道它们什么时候被删除。是PHP文件加载完成时还是完成了我正在调用的函数?无论如何都要保持对象存活,以便在加载文件时可以在另一个实例中调用它。

2 个答案:

答案 0 :(得分:3)

对象 dying 和对象超出范围之间存在区别。

如果您关注PHP中的内存管理和垃圾收集的后勤,那么就像T.J.克劳德指出你可以阅读the manual on garbage collection in PHP

另一方面,如果你更关心变量范围,那么答案是变量的范围通常与它们被声明的块有关。但是你也可以创建全局变量,并使用{来访问它们函数内部的{1}}关键字 - 尽管全局变量通常是坏主意。有关详细信息,请参阅the manual

就持久化变量超出脚本而言,这只能通过某种存储机制来实现。在Web应用程序的上下文中,通常使用session state来完成,但要注意从一个会话到下一个会话的持久化对象的细微差别(即一个脚本调用到下一个会话)可能会有所不同,具体取决于是否会话状态存储在进程中或进程外。如果它是后者,那么对象将被序列化和反序列化,这使事情变得更复杂。

答案 1 :(得分:-2)

PHP内存变量是垃圾收集的,通常它们在请求结束时被删除(减少引用),函数超出范围等。 你仍然可以使用单例模式,并只加载未加载的对象 请注意,这仅适用于每个单个请求,如果您希望将对象保留在内存中以获取多个请求,则不适用于php,

/**
 * Singleton class
 *
 */
final class UserFactory
{
   /**
    * Call this method to get singleton
    *
    * @return UserFactory
    */
  public static function Instance()
  {
    static $inst = null;
    if ($inst === null) {
        $inst = new UserFactory();
    }
    return $inst;
}

/**
 * Private ctor so nobody else can instance it
 *
 */
private function __construct()
{

}
}

使用:

$fact = UserFactory::Instance();
$fact2 = UserFactory::Instance();
$fact == $fact2;

取自https://stackoverflow.com/a/203359/1291995

的代码示例