3

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

4

2 回答 2

1

我猜 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 中提供了方法。

于 2012-05-28T00:20:31.973 回答
0

在 php 中,任何数组都可以转换为对象。我的假设是 pdo 创建一个关联数组,然后将其强制转换。我不知道他的构造函数是否被调用...

实际上,演员表不是正确的词,转换发生在幕后。读这个。模糊发生的事情: http: //php.net/manual/en/language.types.object.php

于 2012-05-28T00:31:44.587 回答