当我调用此函数并向我的类添加构造函数时,我的所有类属性都已设置。这怎么可能——我认为你必须先构造一个类,然后才能设置它的属性?
问问题
245 次
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 回答