2009-08-04 42 views
11

Điều này có hợp pháp không?Sử dụng hằng số làm giá trị hàm mặc định trong PHP

<?php 

function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) { 
     //lots_of_awesome_code 
} 

?> 

nơi MENU_DEFAULT_VALUEODP_DEFAULT_VALUE là hằng số được xác định trước đó trong tệp.

+2

vâng, nhưng tôi gặp sự cố trong một chức năng sử dụng tính năng này và tôi nghĩ có thể về mặt kỹ thuật có thể nhưng chống lại các phương pháp hay nhất. –

Trả lời

18

Vâng, đó là hợp pháp.

Từ the manual:

Giá trị mặc định phải là một biểu hiện liên tục, không (ví dụ) một biến , một thành viên lớp hoặc một hàm gọi.

Hằng số phù hợp với hóa đơn đó một cách hoàn hảo.

+0

Bất kỳ lý do/tài liệu nào không thể tham chiếu đến hằng số bằng '' 'static''' nhưng chỉ thông qua' '' self''', khi thiết lập mặc định cho đối số phương thức lớp? – Kamafeather

10

tại sao bạn không thử?

Tuy nhiên, chỉ trong trường hợp bạn có thể kiểm tra ngay bây giờ, đoạn code sau:

define('MENU_DEFAULT_VALUE', 10); 
define('ODP_DEFAULT_VALUE', 'hello'); 

function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) { 
    var_dump($foo); 
    var_dump($nub); 
    var_dump($odp); 
} 

ftw(); 

cho sản lượng này:

string 'pwnage' (length=6) 
int 10 
string 'hello' (length=5) 

Vì vậy, tôi muốn nói rằng, vâng, nó là hợp lệ: -)

+0

Trong ngữ cảnh của một phương thức lớp tôi phát hiện ra rằng không thể tham chiếu đến hằng số thông qua '' 'static''', nhưng chỉ sử dụng' '' self'''; '' 'myMethod ($ arg1 = static :: MY_CONST)' '' sẽ không hoạt động. Bạn có biết bất kỳ lời giải thích hợp lệ nào cho hành vi khác này không? – Kamafeather

8

Trong ngữ cảnh OOP, bạn cũng có thể sử dụng hằng số thành viên lớp làm giá trị đối số phương thức mặc định.

class MyClass 
{ 
    const A = 1; 

    public function __construct($arg = self::A) 
    { 
     echo $arg; 
    } 
} 
Các vấn đề liên quan