function grab($func, $args = NULL)
{
if (preg_match('/(.+)\\h*(->|::)\\h*(.+)/s', $func, $parts)) {
// Convert string to executable PHP callback
if (!class_exists($parts[1])) {
user_error(sprintf(self::E_Class, $parts[1]), E_USER_ERROR);
}
if ($parts[2] == '->') {
if (is_subclass_of($parts[1], 'Prefab')) {
$parts[1] = call_user_func($parts[1] . '::instance');
} else {
$ref = new ReflectionClass($parts[1]);
$parts[1] = method_exists($parts[1], '__construct') && $args ? $ref->newinstanceargs($args) : $ref->newinstance();
}
}
$func = [$parts[1], $parts[3]];
}
return $func;
}