2011-08-22 24 views
6

Làm thế nào tôi sẽ đi về cách viết một hàm trong php với một số không rõ các thông số, ví dụPhp viết một hàm với các tham số không xác định?

function echoData (parameter1, parameter2,) { 
    //do something 
} 

Nhưng khi bạn gọi hàm bạn có thể sử dụng:

echoData('hello', 'hello2', 'hello3', 'hello'4); 

Vì vậy, rằng các thông số hơn có thể được gửi vì số lượng tham số sẽ không được biết.

+2

bản sao có thể có của [hàm PHP với số lượng tham số không giới hạn] (http://stackoverflow.com/questions/1577383/php-function-with-unlimited-number-of-parameters) và [Có thể hàm PHP chấp nhận một số lượng tham số không giới hạn?] (http://stackoverflow.com/questions/3078454/can-a-php-function-accept-an-unlimited-number-of-parameters) –

Trả lời

11

func_get_args()

function echoData(){ 
    $args = func_get_args(); 
} 

Hãy nhận biết rằng khi bạn có thể làm điều đó, bạn không nên xác định bất kỳ đối số trong phần khai báo hàm nếu bạn đang sử dụng func_get_args() - đơn giản chỉ vì nó được rất khó hiểu nếu/khi bất kỳ đối số được xác định bị bỏ qua

chức năng tương tự về lập luận

  • func_get_arg()
  • func_get_args()
  • func_num_args()
+0

Lưu ý rằng trong khi bạn có thể làm điều đó, bạn không nên định nghĩa bất kỳ đối số nào trong khai báo hàm nếu bạn định sử dụng 'func_get_args()' - đơn giản vì nó sẽ rất khó hiểu nếu/khi bất kỳ đối số đã xác định nào bị bỏ qua. – DaveRandom

+0

@Dave: Rất hay. Tôi sẽ thêm nó vào câu trả lời của tôi – genesis

2

func_get_args sử dụng() để lấy một mảng của tất cả các thông số như thế:

$args = func_get_args(); 

Sau đó bạn có thể sử dụng các mảng hoặc lặp trên nó, bất cứ điều gì phù hợp với trường hợp sử dụng của bạn tốt nhất.

0

Bạn cũng có thể sử dụng một mảng:

<?php  
function example($args = array()) 
{ 
    if (isset ($args["arg1"])) 
     echo "Arg1!"; 
} 

example(array("arg1"=>"val", "arg2"=>"val")); 
8

Chỉ cần cho những ai tìm thấy chủ đề này trên Google.

In PHP 5.6 and above you can use ... để xác định số lượng không rõ các thông số:

function sum(...$numbers) { 
    $acc = 0; 
    foreach ($numbers as $n) { 
     $acc += $n; 
    } 
    return $acc; 
} 

echo sum(1, 2, 3, 4); // 10 

$numbers là một mảng các đối số.

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