Tôi đang chuyển tất cả các cuộc gọi đến chức năng ánh xạ chính và sau đó nó sẽ tự động gọi hàm khác dựa trên chuỗi (cho đến khi phần này, mọi thứ trở nên dễ dàng) vấn đề là tôi muốn chuyển đối số với hàm thứ hai và các tham số này có thể khác nhau. Sau đây là nhất định (không nên thay đổi):đối số chức năng động
function test1($x){
echo $x;
}
function test2($x, $y){
echo $x * $y;
}
và bây giờ đến chức năng lập bản đồ
function mapping ($str){
switch ($str){
case 'name1':
$fn_name = 'test1';
$var = 5;
break;
case 'name2':
$fn_name = 'test2';
$var = 5;
break;
}
$this->{$fn_name}($var);
}
Và sau đó điều này sẽ chạy các bản đồ:
$this->mapping('name1');
$this->mapping('name2'); // This one will crash as it need two variables
Tất nhiên ở trên được đơn giản hóa để tập trung vào vấn đề không phải là mục đích của mã. Vấn đề là khi hàm có nhiều hơn một đối số (có thể dễ dàng xảy ra). Tôi hy vọng có trường hợp chuyển đổi và dựa trên cách các thông số trường hợp được điền, dòng $this->{$fn_name}($var);
sẽ hoạt động.
Bạn có thể vui lòng tư vấn hoặc cho tôi ý tưởng hay không, biết rằng không thể thay đổi cấu trúc hàm (test1, test2). Tôi có thể không đột nhiên bắt đầu sử dụng func_get_args()
hoặc func_get_arg()
Đề xuất của bạn tuyệt vời mệt mỏi và hoạt động tốt. nhưng sau khi khám phá trong php.net nếu tìm thấy call_user_func_array() và nó giải quyết vấn đề của tôi một cách hoàn hảo nhưng tôi vẫn nợ tất cả cho bạn :) – bhefny
FYI - ReflectionFunction sẽ không hoạt động trên các phương thức lớp - ví dụ hoặc tĩnh – phirschybar