PDO::FETCH_CLASS
允许使用预先填充的数据初始化类实例。它看起来像这样:
<?php
class Bar {
private $data = [];
public function __construct ($is) {
// $is === 'test'
// $this->data === ['foo' => 1, 'bar' => 1]
}
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
$db
->query("SELECT `foo`, `bar` FROM `qux`;")
->fetchAll(PDO::FETCH_CLASS, 'Bar', ['test']);
或者,可以在触发setter之前使用PDO::FETCH_PROPS_LATE
来调用构造函数。
我很想知道PDO如何在调用构造函数之前通过setter填充Class实例,或者更具体地说,如果有办法复制这种行为?
答案 0 :(得分:5)
可以使用ReflectionClass::newInstanceWithoutConstructor在PHP 5.4+中执行此操作。
答案 1 :(得分:0)
为此,我这样做:
我在我的超类
中声明了这个神奇的方法 public function __set($name, $value) {
$method = 'set' . str_replace('_', '', $name); //If the properties have '_' and method not
if (method_exists($this, $method)) {
$val = call_user_func(array($this, $method), $value);
}
}
对我来说效果很好