- assert: documentation ( source)
- var_dump: documentation ( source)
- time: documentation ( source)
- is_a: documentation ( source)
- unserialize: documentation ( source)
- serialize: documentation ( source)
- str_replace: documentation ( source)
<?php
class Hoge {
private $_name;
private $_var;
private $_default = "class default";
private function __construct($name) {
$this->_name = $name;
$this->_var = time();
echo "Side effect";
}
}
function callPrivateConstructor($class, $args = array()) {
$dried = serialize(new stdClass);
$fresh = unserialize(str_replace(
'8:"stdClass"',
strlen($class) . ':"' . $class . '"',
$dried
));
assert(is_a($fresh, $class));
$ref = new ReflectionClass($class);
$constructor = $ref->getConstructor();
$constructor->setAccessible(true);
$constructor->invokeArgs($fresh, $args);
return $fresh;
}
$a = callPrivateConstructor("Hoge", array("aaaa"));
var_dump($a);