- var_dump: documentation ( source)
- basename: documentation ( source)
- dirname: documentation ( source)
- class_exists: documentation ( source)
<?php
class Foo {
private $foo;
private function __construct($spam){
$this->foo = $spam;
}
public function getFoo() {
return $this->foo;
}
}
function instantiatePrivateCtor($class /*, $...args */)
{
$args = array_slice(func_get_args(), 1);
$extClass = $class . '__Ext';
if (!class_exists($extClass)) {
$ns = dirname($extClass);
$name = basename($extClass);
var_dump($ns, $name);
eval("
namespace $ns;
class $name extends $class {
public function __construct() {
\$args = func_get_args();
call_user_func_array('parent::__construct', \$args);
}
}
");
}
$reflClass = new \ReflectionClass($extClass);
return $reflClass->hewInstanceArgs($args);
}
$args = 'bacon';
$class = 'Foo';
$reflClass = new \ReflectionClass($class);
$instance = instantiatePrivateCtor($class, 'bacon');
echo $instance->getFoo();