PDOStatement::fetchObject 如何在构造类之前设置属性


How does PDOStatement::fetchObject set properties before the class is constructed?

当我调用这个函数并向我的类添加一个构造函数时,我所有的类属性都已经设置好了。这怎么可能 - 我以为你必须先构造一个类才能设置它的属性?

我猜PDO使用一些内部代码来创建对象而不调用构造函数。但是,即使在纯 PHP 中,也可以在不调用构造函数的情况下实例化一个新对象,您所要做的就是反序列化一个空对象:

class SampleClass {
    private $fld = 'fldValue';
    public function __construct() {
        var_dump(__METHOD__);
    }
    // getters & setters
}
$sc = unserialize(sprintf('O:%d:"%s":0:{}', strlen('SampleClass'), 'SampleClass'));
echo $sc->getFld(); // outputs: fldValue, without calling the construcotr

从 PHP 5.4.0+ 开始ReflectionClass::newInstanceWithoutConstructor()该方法在反射 API 中可用。

在 php 中,任何数组都可以转换为对象。 我的假设是 pdo 创建一个关联数组,然后 jus 强制转换它。 我不知道他是否被召唤了演员...

实际上,演员阵容不是正确的词,转换发生在幕后。阅读此内容。简介发生了什么:http://php.net/manual/en/language.types.object.php