2012-03-16 27 views
7

Tôi có một loạt đối số mà tôi muốn chuyển đến hàm qua call_user_func. Mã sau đây hiện sẽ cung cấp lỗi: Missing argument 2 for Closure. Làm thế nào điều này có thể được viết lại để hoạt động đúng?Vượt qua nhiều đối số đến hàm ẩn danh w/call_user_func

$args = array('foo', 'bar'); 
call_user_func(function($arg1, $arg2) {}, $args); 

Trả lời

15

Hãy thử call_user_func_array() nếu bạn muốn chuyển một mảng tham số.

+1

Câu trả lời hay hơn tôi. –

+0

@KyleDecot Cách tốt nhất để cảm ơn tôi là bằng cách chấp nhận câu trả lời nếu điều này phù hợp với bạn :) – Crashspeeder

0

Hoặc chuyển từng cái một hoặc có chức năng gọi lại chấp nhận một mảng làm đối số và thực hiện phân tích nội bộ.

1

Biết điều này đã được trả lời. Tuy nhiên sau đây cũng hoạt động tốt.

Exec từ 100.000 truy cập


1,006599: call_user_func ($ func, $ value)

1,193323: call_user_func ((array ($ đối tượng, $ func), $ value)

1.232891: call_user_func_array ($ func, array ($ value))

1.309725: call_user_func_array ((mảng ($ object, $ func), mảng ($ value)

Nếu bạn cần phải sử dụng call_user_func:

call_user_func(
    $function, 
     $arg1,$arg2 
); 

Nếu bạn cần phải sử dụng call_user_func_array:

call_user_func_array(
    $function, 
     array($arg1,$arg2) 
); 

Theo thiết kế cả hai có thể vượt qua trong mảng bất kể. Tuy nhiên, cũng bằng cách thiết kế một có thể được yêu cầu nhiều hơn để sử dụng, hơn khác. Tất cả phụ thuộc vào những gì nó đang được sử dụng cho. Một bộ mảng đơn giản chỉ chạy tốt và nhanh hơn, trong call_user_func.

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