2012-03-09 8 views
5
call_user_func('array_pop', $myarray); 

cho 'Parameter 1 tới array_pop() dự kiến ​​sẽ là một tài liệu tham khảo, giá trị nhất định, trong khiarray_pop() yêu cầu NỮA gọi-by-reference khi gọi từ call_user_func()

call_user_func('array_pop', &$myarray); 

cho' Thông báo tham chiếu theo thời gian gọi đã không được chấp nhận '.

Vì vậy, tôi phải làm gì? Tôi đang sử dụng "Phiên bản PHP 5.3.5" trên Windows và việc tắt cảnh báo không được chấp nhận không phải là một tùy chọn.

Cảm ơn!

+1

Có thể điều này là giải pháp thay thế: http://stackoverflow.com/questions/295016/is-it-possible-to-pass-parameters-by-reference-using-call-user-func-array –

Trả lời

5

Hoặc chỉ cần gọi trực tiếp:

array_pop($myarray); 

Hoặc sử dụng call_user_func_array(), mà chấp nhận một loạt các tài liệu tham khảo như các thông số mà không la mắng bạn về cuộc gọi thời gian pass-by-reference:

call_user_func_array('array_pop', array(&$myarray)); 

Lý do điều này không làm tăng một cảnh báo về thời gian gọi pass-by-tham khảo là bởi vì không có gì của loại đó thực sự xảy ra. Có sự khác biệt tinh tế giữa passing a variable by reference và tạo một mảng tham chiếu và chuyển mảng đó theo giá trị.

+0

Đánh bại tôi với nó :) +1 – Dan

+0

Cảm ơn! Tôi thực sự đọc câu trả lời trong một số kết quả google, nhưng tôi không thấy rằng call_user_func đã được thay thế bằng call_user_func_ARRAY và vì vậy tôi nghĩ rằng tôi sẽ phải thay đổi chức năng của tôi để nwrap mảng (mà wouln't có thể trong trường hợp của tôi, kể từ khi tôi đang sử dụng mảng_pop). –

+0

Đơn giản chỉ là thiên tài ... –