- var_dump: documentation ( source)
- unserialize: documentation ( source)
- serialize: documentation ( source)
- str_replace: documentation ( source)
- printf: documentation ( source)
<?php
class Hoge {
private $_name;
private $_var;
private $_default = "class default";
private function __construct($name) {
$this->_name = $name;
$this->_var = "set by constructor";
printf("Side effect %s\n", get_class($this));
}
}
function newInstanceWithoutConstructor($class) {
$dummy = "stdClass";
$dried = serialize(new $dummy);
$fresh = unserialize(str_replace(
strlen($dummy) . ':"' . $dummy . '"',
strlen($class) . ':"' . $class . '"',
$dried
));
return $fresh;
}
function callPrivateConstructor($obj, $args) {
$ref = new ReflectionClass($obj);
$m = $ref->getConstructor();
$m->setAccessible(true);
$m->invokeArgs($obj, $args);
}
$a = newInstanceWithoutConstructor("Hoge");
//assert(is_a($a, "Hoge"));
var_dump($a);
callPrivateConstructor($a, array("foo"));
var_dump($a);