2008-08-29 31 views
127

Trong hướng dẫn sử dụng PHP, để hiển thị cú pháp cho các hàm có tham số tùy chọn, chúng sử dụng các dấu ngoặc xung quanh mỗi bộ tham số tùy chọn phụ thuộc. Ví dụ, đối với date() chức năng, hướng dẫn đọc:Làm thế nào để bạn tạo các đối số tùy chọn trong php?

string date (string $format [, int $timestamp = time() ]) 

đâu $timestamp là một tham số tùy chọn, và khi rời khỏi nó mặc định để trống giá trị trả về các chức năng của time().

Bạn làm cách nào để tạo các tham số tùy chọn như thế này khi xác định hàm tùy chỉnh trong PHP?

Trả lời

180

Giống như hướng dẫn, sử dụng một equals (=) đăng nhập của bạn định nghĩa các thông số:

function dosomething($var1, $var2, $var3 = 'somevalue'){ 
    // Rest of function here... 
} 
12

Cho đối số tùy chọn một giá trị mặc định.

function date ($format, $timestamp='') { 
} 
18

Một số lưu ý rằng tôi cũng tìm thấy hữu ích:

  • Giữ các giá trị mặc định của bạn ở bên phải.

    function whatever($var1, $var2, $var3="constant", $var4="another") 
    
  • Giá trị mặc định của đối số phải là biểu thức không đổi. Nó không thể là một biến hoặc một cuộc gọi hàm.

35

Giá trị mặc định của đối số phải là biểu thức không đổi. Nó không thể là một biến hoặc một cuộc gọi hàm.

Nếu bạn cần tuy nhiên chức năng này:

function foo($foo, $bar = false) 
{ 
    if(!$bar) 
    { 
     $bar = $foo; 
    } 
} 

Giả sử $bar không được kỳ vọng sẽ trở thành một boolean tất nhiên.

+1

, điều này sẽ đánh giá nếu 0 hoặc "false" được chuyển đến $ bar. – Tyzoid

+24

Null là một mặc định tốt hơn nhiều. – Kzqai

+1

không phải là $ bar! == false cũng hoạt động? – DooMMasteR

4

Chức năng cập nhật sẽ được xác định một cái gì đó như thế này:

function date($format, $timestamp = null) 
{ 
    if ($timestamp === null) { 
     $timestamp = time(); 
    } 

    // Format the timestamp according to $format 
} 

Thông thường, bạn sẽ đặt giá trị mặc định như thế này:

function foo($required, $optional = 42) 
{ 
    // This function can be passed one or more arguments 
} 

Tuy nhiên, chỉ literals là đối số mặc định hợp lệ, đó là lý do tại sao tôi đã sử dụng null làm đối số mặc định trong ví dụ đầu tiên, không phải$timestamp = time() và kết hợp nó với một kiểm tra rỗng. Chữ viết bao gồm mảng (array() hoặc []), booleans, numbers, strings, và null.

5

Nếu bạn không biết cần xử lý bao nhiêu thuộc tính, bạn có thể sử dụng mã thông báo danh sách đối số variadic (...) được giới thiệu trong PHP 5.6 (see full documentation here).

Cú pháp:

function <functionName> ([<type> ]...<$paramName>) {} 

Ví dụ:

function someVariadricFunc(...$arguments) { 
    foreach ($arguments as $arg) { 
    // do some stuff with $arg... 
    } 
} 

someVariadricFunc();   // an empty array going to be passed 
someVariadricFunc('apple'); // provides a one-element array 
someVariadricFunc('apple', 'pear', 'orange', 'banana'); 

Như bạn có thể thấy, dấu hiệu này về cơ bản biến tất cả các tham số để một mảng, mà bạn có thể xử lý trong bất kỳ cách nào bạn muốn. Tuy nhiên,

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