Php 停止生成PDO::FETCH_类中不存在的成员变量
当我们使用Php 停止生成PDO::FETCH_类中不存在的成员变量,php,pdo,Php,Pdo,当我们使用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=$st
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();
现在,如果i
var\u dump()
$user,则它具有“password”公共属性。我想防止< p>唯一的解决办法是,我认为可以接受的(并且我仍然不喜欢它)是将获取模式设置为<代码> pdo::FuffChug类pDo::FutChyPrimsSuthAudio//Cuth>并定义一个空的< < > >代码>()/>代码>方法,或者至少,如果不存在,则不设置属性。
因此,要根据上述代码向您展示:
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();
这确实有效,但正如我所说,我不喜欢它,主要是在您的示例中,因为它允许从外部设置
受保护的
属性,为了避免这种情况,您必须开始做一些可怕的事情,创建额外的属性来表示锁定和诸如此类的废话。将有问题的项创建为私有成员,并且不会填充值,但我怀疑这不是您想要的。它还可能导致PDO抛出一个未检查的异常。我怀疑答案是“你不能”,你只能接受它。不过我很高兴被证明是错的。这和提到私人会员有点关系too@Cups有趣的是,这个问题似乎表明,这个问题所要问的如何避免的事情无论如何都不会发生。我现在正在测试它到底有什么作用。我已经更新了我的帖子来澄清这个问题problem@user1538127我明白(并重复)了这个问题。这可能是一个明显的问题,但您不能不在查询的字段列表中包含不需要的字段吗?除此之外,我可以想出一个有点难看的解决办法,但我认为不获取你一开始不想要的数据将是最好的解决方案。