PHP PDO:将数据作为对象获取 – 分配给BEFORE __construct的属性.它是否正确?

前端之家收集整理的这篇文章主要介绍了PHP PDO:将数据作为对象获取 – 分配给BEFORE __construct的属性.它是否正确?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
完整的问题应该是“这是正确的还是一些我不能指望的错误?”

WHY is this correct behavior?

我一直在使用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,看到它,并给了它一枪.

猜你在找的PHP相关文章