2010-01-24 33 views
32

Tôi muốn tạo một hàm (my_function()) nhận số lượng đối số không giới hạn và chuyển nó vào một hàm khác (call_another_function()).PHP, cách chuyển các giá trị func-get-args sang một hàm khác dưới dạng danh sách các đối số?

function my_function() {  
    another_function($arg1, $arg2, $arg3 ... $argN);  
} 

Vì vậy, muốn gọi my_function(1,2,3,4,5) và nhận được gọi another_function(1,2,3,4,5)

tôi biết rằng tôi shoud sử dụng func_get_args() để có được tất cả các đối số chức năng như mảng, nhưng tôi không biết làm thế nào để vượt qua đối số này để chức năng khác .

Cảm ơn bạn.

+0

Bạn không thể sửa đổi another_function để chấp nhận mảng làm thông số? – Aif

+0

Không, đó là chức năng của bên thứ ba: ( – Kirzilla

Trả lời

48

Hãy thử call_user_func_array:

function my_function() {  
    $args = func_get_args(); 
    call_user_func_array("another_function", $args); 
} 

Trong lập trình và khoa học máy tính, điều này được gọi là một chức năng apply.

+8

Hãy coi chừng, func_get_args không thể được sử dụng làm tham số cho một hàm khác! Bạn cần một biến tạm thời để nắm bắt các đối số đầu tiên – fresch

+1

@fresch đó là? –

+2

@Jordan, hãy xem câu hỏi này: http://stackoverflow.com/questions/4979507/difference-in-behaviour-of-func-num-args-func-get-arg-and-func- get-args-from-php –

11

Sử dụng call_user_func_array như

call_user_func_array('another_function', func_get_args()); 
+0

Lưu ý: Điều này sẽ chỉ hoạt động trong PHP 5.3+ – MPV

1

Tài liệu chưa được ghi nhưng bạn có thể sử dụng API reflection, đặc biệt là invokeArgs.

(có lẽ tôi đã sử dụng nhận xét chứ không phải là toàn bộ bài đăng)

+0

Tôi đã kiểm tra API phản chiếu, nhưng OOP PHP của tôi quá nghèo để hiểu được mặt thực tế của "API phản chiếu". ( – Kirzilla

+0

Đây là url đẹp http://www.tuxradar.com/practicalphp/16/4/0 đã giúp tôi hiểu lớp Reflection. – Kirzilla

Các vấn đề liên quan