Lors de l'utilisation des espaces de noms, call_user_func() est la seule façon d'exécuter une fonction que vous ne connaissez pas le nom de l'avance, par exemple:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Si toutes vos fonctions étaient dans le même espace, alors il ne serait pas une telle question, que vous pouvez utiliser quelque chose comme ceci:
$function = 'getCurrency';
$function('USA');
Edit: Après @Jannis disant que je me trompe, je l'ai fait un peu plus de tests, et n'a pas été 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 seconde méthode fonctionne pour PHP 7 et plus, mais pas PHP 5.6.
Merci Kai. call_user_func s'est avéré être exactement ce dont j'avais besoin. – jay
'call_user_func' n'est pas forcément nécessaire. Vous pouvez toujours appeler une fonction en utilisant des fonctions variables: '$ some_func()'. 'call_user_func_array' est celui qui est vraiment utile. –
php a toujours besoin de "rechercher la fonction à l'exécution" – VolkerK