我有以下代码:
//init X (DB initialization with credentials)
$x = MySqlConnector::getMySql();
//I destroy $x
unset($x);
$x = null;
//I try to re-initialize the database, but it is already initialized
//as evident from my logs
$x = MySqlConnector::getMySql();
相关功能:
public static function getMySql()
{
if (null === static::$instance)
{
include 'include/config.php';
static::$instance = new MySql(DBHOST, DBUSER, DBPASS);
}
return static::$instance;
}
这告诉我,即使在我删除了持有初始化对象的变量之后,某种程度上MySqlConnector
仍留在内存中。
如何?我不认为它适用于任何其他非静态类。
答案 0 :(得分:3)
静态属性存在于全局范围内,并且不与任何特定实例相关联。
您可能会取消设置$x
,但MySqlConnector::$instance
仍未定义。
通常,在这种情况下,$instance
将是private static
,因此您无法仅通过访问方法直接访问该属性,从而保证只有Singleton类才具有访问以修改属性,您不会更改/设置/取消设置它,但通过正确定义的方法(如果存在)。
manual中的更多信息。