当我们使用PDO::FETCH_CLASS
时,使用公共范围创建指定类的成员变量。如何防止此默认行为并停止创建这些公共成员?
class user
{
/**
Table user has
id int PK
name UNIQUE
password
*/
protected $id;
protected $name;
/*more code.......*/
}
$stmt->setFetchMode(\PDO::FETCH_CLASS, 'user');
$user=$stmt->fetch();
现在如果我var_dump()
$ user它有'password'公共属性。我想阻止
答案 0 :(得分:0)
我能找到的唯一一个我认为可以接受的解决方案(我仍然不会喜欢它)是将获取模式设置为PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE
并定义为空__set()
方法 - 或者至少是一个如果不存在则不设置属性的方法。
请根据您的上述代码向您展示:
class user {
protected $id;
protected $name;
public function __set ($name, $val) {
if (property_exists($this, $name)) {
$this->$name = $val;
}
}
}
$stmt->setFetchMode(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE, 'user');
$user=$stmt->fetch();
这是工作但正如我所说的那样不喜欢它,主要是在你的例子中,因为它允许从{<1}}属性设置在外面,为了规避这一点,你开始做一些可怕的事情来创造额外的属性,以表明锁定和各种类似的废话。