Podczas korzystania z przestrzeni nazw call_user_func () jest jedynym sposobem na uruchomienie funkcji, której nazwy nie znasz, na przykład:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Gdyby wszystkie twoje funkcje znajdowały się w tej samej przestrzeni nazw, nie byłby to taki problem, ponieważ możesz użyć czegoś takiego:
$function = 'getCurrency';
$function('USA');
Edycja: Śledząc @Jannis mówiąc, że się mylę, przeprowadziłem trochę więcej testów i nie miałem dużo szczęścia:
<?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>";
}
Możesz zobaczyć wyniki wyjściowe tutaj: https://3v4l.org/iBERh wydaje się, że druga metoda działa od PHP 7, ale nie PHP 5.6.
call_user_func
niekoniecznie jest potrzebne. Zawsze można wywołać funkcję za pomocą funkcji zmiennych:$some_func()
.call_user_func_array
jest tym, który jest naprawdę przydatny.