Saat menggunakan ruang nama, call_user_func () adalah satu-satunya cara untuk menjalankan fungsi yang namanya tidak Anda ketahui sebelumnya, misalnya:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Jika semua fungsi Anda berada di namespace yang sama, maka itu tidak akan menjadi masalah, karena Anda dapat menggunakan sesuatu seperti ini:
$function = 'getCurrency';
$function('USA');
Sunting: Mengikuti @Jannis mengatakan bahwa saya salah, saya melakukan sedikit lebih banyak pengujian, dan tidak terlalu beruntung:
<?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>";
}
Anda dapat melihat hasil keluarannya di sini: https://3v4l.org/iBERh tampaknya metode kedua berfungsi untuk PHP 7 dan seterusnya, tetapi tidak untuk PHP 5.6.
call_user_functidak selalu dibutuhkan. Anda selalu dapat memanggil fungsi dengan menggunakan fungsi variabel:$some_func().call_user_func_arrayadalah salah satu yang sangat berguna.