PHP PDO:将数据作为对象获取 – 分配给BEFORE __construct的属
完整的问题应该是“这是正确的还是一些我不能指望的错误?”
我一直在使用PDO,特别是直接将数据提取到对象中.在这样做的时候我发现了这一点: 如果我直接将数据直接提取到如下对象中: $STH = $DBH->prepare('SELECT first_name,address from people WHERE 1'); $obj = $STH->fetchAll(PDO::FETCH_CLASS,'person'); 并有一个这样的对象: class person { public $first_name; public $address; function __construct() { $this->first_name = $this->first_name . " is the name"; } } 它告诉我,在调用__construct之前,这些属性是被赋值的,因为这些名称都附加了“是名称”. 这是一些错误(在这种情况下,我不能/不会指望)或者这是它应该的方式.因为它现在的工作方式真的很好. 更新 显然,according to one of the maintainers这不是一个bug.有人在2008年将其发布为错误,答复是“它不是错误,阅读文档”. 不过,我真的很想知道为什么这是正确的行为.
经过很多阅读,我想我终于遇到了这个答案:这样做有意思,你可以选择使它不起作用.
有一个大多数未公开的PDO常数称为PDO :: FETCH_PROPS_LATE,您可以使用它来使属性在构造后被提取到对象中.例如: $obj = $STH->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,'person'); 将导致在创建对象之后分配属性,因此我上面的示例根本不会修改属性.离开PDO :: FETCH_PROPS_LATE当然会导致它像原来的问题的例子中所描述的那样行事. 维护者似乎已经积极地考虑到这两种行为可能是可取的,并给予您选择这样做.文件甚至没有解释 – 我是reading through a list of PDO constants,看到它,并给了它一枪. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |