gpt4 book ai didi

php - 将 PDO::FETCH_CLASS 与魔术方法一起使用

转载 作者:可可西里 更新时间:2023-10-31 23:09:31 24 4
gpt4 key购买 nike

我有一个类使用魔术方法来存储属性。这是一个简化的示例:

class Foo {
protected $props;

public function __construct(array $props = array()) {
$this->props = $props;
}

public function __get($prop) {
return $this->props[$prop];
}

public function __set($prop, $val) {
$this->props[$prop] = $val;
}
}

我正在尝试在执行后为 PDOStatement 的每个数据库行实例化此类的对象,如下所示(不起作用):

$st->setFetchMode(PDO::FETCH_CLASS, 'Foo');

foreach ($st as $row) {
var_dump($row);
}

问题是 PDO::FETCH_CLASS 在设置属性值时似乎没有在我的类上触发神奇的 __set() 方法。

如何使用 PDO 实现预期的效果?

最佳答案

PDO 的默认行为是在调用构造函数之前设置属性。在调用构造函数后设置获取模式以设置属性时,在位掩码中包含 PDO::FETCH_PROPS_LATE,这将导致在未定义的属性上调用 __set 魔法方法.

$st->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Foo');

或者,创建一个实例并获取它(即将获取模式设置为 PDO::FETCH_INTO)。

关于php - 将 PDO::FETCH_CLASS 与魔术方法一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8898794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com