Làm thế nào để bạn tạo các đối số tùy chọn trong php?


189

Trong hướng dẫn sử dụng PHP, để hiển thị cú pháp cho các hàm với các tham số tùy chọn, chúng sử dụng dấu ngoặc 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:

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

Trường hợp $timestamplà một tham số tùy chọn và khi để trống, nó mặc định time()là giá trị trả về của hàm.

Làm thế nào để bạn đi về việc tạo các tham số tùy chọn như thế này khi xác định một hàm tùy chỉnh trong PHP?

Câu trả lời:


253

Giống như hướng dẫn sử dụng, hãy sử dụng dấu bằng ( =) trong định nghĩa của bạn về các tham số:

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

function dosomething($var1, $var2, $optionalValue = null)Tôi tìm thấy tùy chọn này tốt hơn.
Mohammad Zaid Pathan

52

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 hàm gọi.

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

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

Tất nhiên, giả sử $barkhông được coi là một boolean.


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

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

3
@DooMMasteR, ở đây, ý bạn là $bar === false- đây là một hành động nên được thực hiện khi $barđã được mặc định false. Điều này sẽ tránh hành động không chính xác nếu 0được thông qua, vì vậy nó hoạt động - KHÔNG GIỚI HẠN một boolean là cần thiết. Như Kzqai đã nói, một giải pháp tổng quát hơn là sử dụng $bar = null, bởi vì điều đó cũng có thể được sử dụng khi các giá trị của thanh $ là boolean. Các thử nghiệm sau đó trở thành if (is_null($bar))hoặc if ($bar === null).
ToolmakerSteve

22

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

  • Giữ các giá trị mặc định của bạn ở phía 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 hàm gọi.


14

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

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

10

Hàm ngày sẽ được định nghĩa giống 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ỉ có nghĩa đen là đối số mặc định hợp lệ, đó là lý do tại sao tôi sử dụng nulllàm đối số mặc định trong ví dụ đầu tiên, chứ không phải $timestamp = time() và kết hợp nó với kiểm tra null. Nghĩa đen bao gồm mảng ( array()hoặc []), booleans, số, chuỗi và null.


8

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

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, mã thông báo này về cơ bản biến tất cả các tham số thành một mảng, mà bạn có thể xử lý theo bất kỳ cách nào bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.