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