- var_dump: documentation ( source)
- strpos: documentation ( source)
- array_shift: documentation ( source)
- create_function: documentation ( source)
- implode: documentation ( source)
<?php
class CallableStringifier
{
private static $callables = array();
public static function stringify($callable)
{
$id = count(self::$callables);
self::$callables[$id] = $callable;
if (is_array($callable)) {
$func = new ReflectionMethod($callable[0], $callable[1]);
} else if (is_string($callable) && false !== strpos($callable, '::')) {
$func = new ReflectionMethod($callable);
} else {
$func = new ReflectionFunction($callable);
}
$params = array();
foreach ($func->getParameters() as $param) {
$params[$param->getPosition()] = '$' . $param->getName();
}
return 'return ' . __CLASS__ . '::call(' . $id . ', ' . implode(', ', $params) . ');';
}
public static function call()
{
$args = func_get_args();
$id = array_shift($args);
var_dump($args);
return call_user_func_array(self::$callables[$id], $args);
}
}
var_dump(CallableStringifier::stringify(function($arg1) { return $arg1; }));
$func = create_function('$arg1', CallableStringifier::stringify(function($arg1) { return $arg1; }));
echo $func(1);