При використанні просторів імен call_user_func () - єдиний спосіб запустити функцію, якій ви не знаєте назви заздалегідь, наприклад:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Якби всі ваші функції були в одному просторі імен, то це не було б такою проблемою, оскільки ви могли б використовувати щось подібне:
$function = 'getCurrency';
$function('USA');
Редагувати: Після того, як @Jannis сказав, що я помиляюсь, я ще трохи тестував, і мені не повезло:
<?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()'
}
Результати ви можете побачити тут: https://3v4l.org/iBERh, здається, другий метод працює для PHP 7, але не PHP 5.6.