2009-08-04 13 views
11

Czy to jest legalne?Używanie stałych jako domyślnych wartości funkcji w PHP

<?php 

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

?> 

gdzie MENU_DEFAULT_VALUE i ODP_DEFAULT_VALUE są stałe zdefiniowane uprzednio w pliku.

+2

Tak, ale miałem problemy w funkcji, która używa tego i pomyślałem, że może to technicznie możliwe, ale wbrew najlepszym praktykom. –

Odpowiedz

18

Tak, to jest legalne.

Od the manual:

wartość Domyślna musi być stałym wypowiedzi, nie (na przykład) zmienną , członek klasy lub funkcją wezwanie.

Stałe doskonale pasują do tego rachunku.

+0

Jakikolwiek powód/dokumentacja nie może odnosić się do stałej przy użyciu '' 'static''' ale tylko poprzez' '' self''' przy ustawianiu domyślnych dla argumentu metody klasy? – Kamafeather

10

dlaczego nie spróbujesz?

Mimo to, na wszelki wypadek można przetestować teraz, poniższy kod:

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(); 

daje to wyjście:

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

więc powiedziałbym, że tak, to jest ważne: -)

+0

W kontekście metody klasy dowiedziałem się, że nie można odnieść się do stałej przez '' 'static''', ale po prostu używając' '' self'''; ten '' 'myMethod ($ arg1 = static :: MY_CONST)' '' nie zadziała. Czy znasz jakieś ważne wyjaśnienie tego innego zachowania? – Kamafeather

8

W kontekście OOP można również użyć stałej elementu klasy jako domyślnej wartości argumentu metody.

Powiązane problemy