Cuando se utilizan espacios de nombres, call_user_func () es la única forma de ejecutar una función que no conoce el nombre de antemano, por ejemplo:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Si todas sus funciones estuvieran en el mismo espacio de nombres, entonces no sería un problema, ya que podría usar algo como esto:
$function = 'getCurrency';
$function('USA');
Editar: Siguiendo a @Jannis diciendo que estoy equivocado, hice un poco más de pruebas y no tuve mucha suerte:
<?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()'
}
Puede ver los resultados de salida aquí: https://3v4l.org/iBERh parece que el segundo método funciona para PHP 7 en adelante, pero no PHP 5.6.