我有一个类似于以下的类:
class Person
{
private static $_sqlData;
public function __construct($id)
{
if (!self::$_sqlData)
{
self::$_sqlData = // GET THE DB STUFF
}
}
public function getName()
{
return self::$_sqlData['name'];
}
}
这一直很好,直到我需要把它放在一个循环中。
foreach ($ids as $id)
{
$person = new Person($id);
echo $person->getName();
}
这将继续返回第一个人名,而不是给定ID的所有名称。原因是静态变量。
我已经通过添加__destruct()
函数将$_sqlData
设置为false,然后在unset()
循环中调用$person
上的foreach()
来解决此问题。
这是处理这个问题的好方法吗?我应该以不同的方式接近这个吗?
答案 0 :(得分:4)
为什么使用静态变量?你需要这个吗?似乎没有为$ _sqlData使用静态var,只是使用一个实例变量,会给你相同的结果,除非你没有向我们展示。
实例变量将会破坏,就像您手动执行静态变量一样。