我遇到了一个难以跟踪的错误,但我不确定是什么导致了这个错误。我有一个属性类,我希望使用名为 loadProperty()的方法从表属性中获取一个条目。此方法属于单例类(注册表)。
public function loadProperty() {
$this->load('model', 'property');
$sth = $this->dbh->prepare("SELECT * FROM property WHERE subdomain = :subdomain LIMIT 1");
$sth->setFetchMode(PDO::FETCH_CLASS, 'property');
$data = array('subdomain' => $this->router->subdomain);
try {
$sth->execute($data);
if ($sth->rowCount() == 1) {
$this->property = $sth->fetch();
} else {
$this->property = null;
}
} catch (PDOException $exception) {
// HANDLING EXCEPTION
}
}
该方法的第一行加载模型。它只是查找类文件,并需要 require_once 。
当我使用PDO :: FETCH_BOTH而不是PDO :: FETCH_CLASS时,所有这一切都正常。我的猜测是PDO正在幕后做一些我不知道的事情,但这会导致我的loadProperty方法无限次被调用。
我在这里俯瞰什么?
答案 0 :(得分:2)
无限循环原来是由我自己的错误引起的 - 谁曾想过。通过将PDO的提取模式设置为 PDO :: FETCH_CLASS , PDO 会尝试实例化属性的实例,这可能是人们所期望的。但是,模型在其构造函数方法中创建对 Registry 类的引用,从而导致调用 Registry 类的构造函数,其中包含 loadProperty 上面显示的方法。结果是无限循环。