我开始使用 PHP 中的对象,我想知道它们什么时候被删除。是在 PHP 文件完成加载还是在我调用的函数完成时?无论如何要保持对象处于活动状态,以便在加载文件时可以在另一个实例中调用它。
问问题
252 次
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;
于 2013-10-12T17:00:45.017 回答