Ao usar namespaces, call_user_func () é a única maneira de executar uma função cujo nome você não sabe de antemão, por exemplo:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Se todas as suas funções estivessem no mesmo namespace, então não seria um problema, pois você poderia usar algo assim:
$function = 'getCurrency';
$function('USA');
Edit: Após @Jannis dizendo que estou errado, fiz mais alguns testes e não tive muita sorte:
<?php
namespace Foo {
class Bar {
public static function getBar() {
return 'Bar';
}
}
echo "<h1>Bar: ".\Foo\Bar::getBar()."</h1>";
// outputs 'Bar: Bar'
$function = '\Foo\Bar::getBar';
echo "<h1>Bar: ".$function()."</h1>";
// outputs 'Fatal error: Call to undefined function \Foo\Bar::getBar()'
$function = '\Foo\Bar\getBar';
echo "<h1>Bar: ".$function()."</h1>";
// outputs 'Fatal error: Call to undefined function \foo\Bar\getBar()'
}
Você pode ver os resultados de saída aqui: https://3v4l.org/iBERh parece que o segundo método funciona para o PHP 7 em diante, mas não para o PHP 5.6.