在调用构造函数之前,PDO :: FETCH_CLASS如何填充对象属性?

Gaj*_*jus 4 php pdo

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']);
Run Code Online (Sandbox Code Playgroud)

或者,可以PDO::FETCH_PROPS_LATE在触发setter之前调用构造函数.

我很想知道PDO如何在调用构造函数之前通过setter填充Class实例,或者更具体地说,如果有办法复制这种行为?

Gaj*_*jus 5

可以使用ReflectionClass :: newInstanceWithoutConstructor在PHP 5.4+中执行此操作.