Lors de l'utilisation d'espaces de noms, call_user_func () est le seul moyen d'exécuter une fonction dont vous ne connaissez pas le nom au préalable, par exemple:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Si toutes vos fonctions étaient dans le même espace de noms, alors ce ne serait pas un tel problème, car vous pourriez utiliser quelque chose comme ceci:
$function = 'getCurrency';
$function('USA');
Edit: Après @Jannis disant que je me trompe, j'ai fait un peu plus de tests et je n'ai pas eu beaucoup de chance:
<?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()'
}
Vous pouvez voir les résultats de sortie ici: https://3v4l.org/iBERh il semble que la deuxième méthode fonctionne à partir de PHP 7, mais pas de PHP 5.6.