2011-11-08 61 views
13

Trong PHP, khi xác định hàm số số đối số tối đa bạn có thể tạo là bao nhiêu? Đây không phải là điều tôi đang làm, chỉ là một câu hỏi xuất hiện khi thảo luận với một đồng nghiệp :)Chức năng PHP - Số lượng đối số tối đa

Điều này hoàn toàn có thể bị giới hạn về bộ nhớ không? hiệu quả không giới hạn?

+2

Tại sao bạn không kiểm tra? http://stackoverflow.com/questions/8049673/php-functions-maximum-number-of-arguments/8049856#8049856 – hakre

+0

Tôi rất biết ơn vì anh ấy đã không, nhưng được hỏi thay vào đó. Bạn thấy đấy, theo cách này, tất cả chúng ta cũng không phải. SO đã phục vụ cộng đồng một cách tuyệt vời một lần nữa. –

Trả lời

9

Đối số cho hàm được đẩy lên ngăn xếp, sau đó hàm được gọi lần lượt đọc chồng và sử dụng các giá trị đó làm tham số.

Vì vậy, miễn là ngăn xếp không đầy, bạn có thể tiếp tục thêm thông số, nhưng nó sẽ tùy thuộc vào tình huống và tại thời điểm thiết kế bạn sẽ không biết kích thước ngăn xếp.

Nhưng tôi thực sự hy vọng đây là một cuộc thảo luận kỹ thuật thuần túy và bạn không cần IRL. ;-)

+0

haha, không không, như tôi đã đề cập đây không phải là IRL - thuần túy kỹ thuật ramblings :-) – bagwaa

11

Không có giới hạn. Và bạn luôn có thể sử dụng func_get_args(), func_get_arg()func_num_args() để tránh viết tất cả các đối số trong định nghĩa hàm.

3

Tôi thực sự không biết giới hạn là gì, nhưng dù bằng cách nào, nếu bạn tạo một hàm với quá nhiều đối số, mã của bạn sẽ không dễ đọc như vậy. Trong trường hợp bạn muốn thêm nhiều đối số chức năng bạn có thể làm một cái gì đó như thế:

$option = array(
    'arg_1' => 'value', 
    'arg_2' => 'value', 
    .... 
    'arg_x' => 'value' 
); 

function function_name($args = "") 
{ 
    $defaults = array(
     'arg_1' => 'default_value', 
     'arg_2' => 'default_value' 
     .... 
     'arg_x' => 'default_value' 
    ); 

    $arguments = array_merge($defaults, (array)$args); 
    extract($arguments); 

    echo $arg_1; 
    echo $arg_x; 
} 
4

khi xác định một hàm số lượng tối đa của các đối số mà bạn có thể tạo ra là bao nhiêu?

Tôi không biết giới hạn cụ thể về số đối số dưới dạng số cố định. Một bài kiểm tra nhanh cho thấy tôi không có vấn đề gì khi định nghĩa một hàm với 255 555 đối số. Phải mất một thời gian để xác định hàm và thực hiện nó. Tuy nhiên, nó hoạt động.

Khi số được tăng lên, tôi đã chạy vào giới hạn bộ nhớ có thể là giới hạn chuỗi. Bạn có thể muốn cải thiện trường hợp thử nghiệm, sử dụng bộ đệm và lưu tệp vào đĩa theo trình tự và bao gồm sau đó:

$count = 255555; 

$code = 'function test(%s) {return 1;}; return test();'; 

$params = ltrim(implode('=0, $p', range(0, $count)), '0, =').'=0'; 

echo eval(sprintf($code, $params)); 
Các vấn đề liên quan