この関数を呼び出して、クラスにコンストラクターを追加すると、すべてのクラスプロパティが既に設定されています。それはどのように可能ですか?プロパティを設定する前にクラスを作成する必要があると思いましたか?
質問する
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 が連想配列を作成し、それを jus キャストすることです。彼のコンストラクターがキャストで呼び出されるかどうかはわかりません...
実際、キャストという言葉は正しくありません。変換は舞台裏で行われます。これを読む。何が起こるかについての説明: http://php.net/manual/en/language.types.object.php
于 2012-05-28T00:31:44.587 に答える