Khi sử dụng không gian tên, call_user_func () là cách duy nhất để chạy một hàm mà bạn không biết trước tên của nó, ví dụ:
$function = '\Utilities\SearchTools::getCurrency';
call_user_func($function,'USA');
Nếu tất cả các chức năng của bạn nằm trong cùng một không gian tên, thì đó sẽ không phải là vấn đề như vậy, vì bạn có thể sử dụng một cái gì đó như sau:
$function = 'getCurrency';
$function('USA');
Chỉnh sửa: Sau @Jannis nói rằng tôi đã sai, tôi đã thử nghiệm thêm một chút và không gặp nhiều may mắn:
<?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()'
}
Bạn có thể xem kết quả đầu ra tại đây: https://3v4l.org/iBERh có vẻ như phương pháp thứ hai hoạt động với PHP 7 trở đi, nhưng không phải PHP 5.6.