我正在浏览一本Joomla书,我在MVC模式一章中遇到了以下代码:
class QuizController extends JController
{
static function &getInstance(/* some PHP code... */)
{
// use a static array to store controller instances
static $instances;
if (!$instances)
{
$instances = array();
}
/* some PHP code... */
// return a reference to the controller
return $instances[$class];
}
}
$instances
的生命周期是多少?什么时候被摧毁?
如果它在请求的生命周期内处于活动状态,则声明$instances
static是没有意义的,因为此代码将运行一次。
如果它在用户会话期间处于活动状态,那么PHP引擎如何知道这一点?
答案 0 :(得分:1)
通过代码的外观,变量将持续到脚本执行完毕为止。
因为您无法从该函数外部访问变量,并且没有unset()
调用该变量,所以在脚本执行结束之前它不会被销毁。
答案 1 :(得分:0)
如果它在请求的生命周期内仍然存在,则声明 $ instances static没有意义,因为这段代码将被运行 一次。
是的,静态变量仅在请求期间存在。如果创建对象很昂贵,或者如果有多个副本会导致问题,那么将对象存储在静态变量中是一种常见的设计模式。
不一定是这个函数只被调用一次 - 它可能被多次调用,至少在某些页面/某些模块上被调用。