При использовании пространств имен 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>";
$function = '\Foo\Bar::getBar';
echo "<h1>Bar: ".$function()."</h1>";
$function = '\Foo\Bar\getBar';
echo "<h1>Bar: ".$function()."</h1>";
}
Вы можете увидеть выходные результаты здесь: https://3v4l.org/iBERh, похоже, второй метод работает для PHP 7 и новее, но не для PHP 5.6.
call_user_func
не обязательно нужен. Вы всегда можете вызвать функцию с помощью функции переменных:$some_func()
.call_user_func_array
действительно полезен.