1

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

4

2 回答 2

3

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

如果您关心 PHP 中内存管理和垃圾收集的后勤工作,那么正如 TJ Crowder 指出的那样,您可以阅读PHP 中的垃圾收集手册

另一方面,如果您更关心变量范围,那么答案是变量的范围通常绑定到声明它们的块。但是您也可以创建全局变量,并使用global函数内部的关键字访问它们- 虽然全局变量通常是一个坏主意。有关详细信息,请参阅手册

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

于 2013-10-12T16:54:45.513 回答
-2

PHP 内存变量是垃圾回收的,通常它们在请求结束时被删除(减少 ref),函数超出范围.. 等你仍然可以使用单例模式,并且只加载未加载的对象请注意,这只适用于每个单例请求,如果您想将对象保留在内存中进行多个请求,那对 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的代码示例

于 2013-10-12T17:00:45.017 回答