Исходя из фона javascript и будучи испорченным им, я просто закодировал это:
function staticFunctionReference($name)
{
return function() use ($name)
{
$className = strstr($name, '::', true);
if (class_exists(__NAMESPACE__."\\$className")) $name = __NAMESPACE__."\\$name";
return call_user_func_array($name, func_get_args());
};
}
Чтобы использовать это:
$foo = staticFunctionReference('Foo::bar');
$foo('some', 'parameters');
Это функция, которая возвращает функцию, которая вызывает функцию, которую вы хотели вызвать. Звучит причудливо, но, как вы можете видеть на практике, это кусок пирога.
Работает с пространствами имен, и возвращаемая функция должна работать так же, как статический метод - параметры работают одинаково.