Al utilizar espacios de nombres, call_user_func() es la única forma de ejecutar una función que no sabes el nombre de antemano, por ejemplo:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Si todos sus funciones estaban en el mismo espacio de nombres, entonces no sería un problema tal, que se podría utilizar algo como esto:
$function = 'getCurrency';
$function('USA');
Editar: Siguiendo @Jannis diciendo que estoy equivocado Hice un poco más pruebas, y no estaba teniendo 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()'
}
Se 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.
Gracias Kai. call_user_func resultó ser exactamente lo que necesitaba. – jay
'call_user_func' no es necesariamente necesario. Siempre puede llamar a una función mediante el uso de funciones de variables: '$ some_func()'. 'call_user_func_array' es el que es realmente útil. –
php siempre necesita "buscar la función en tiempo de ejecución" – VolkerK