Forum und email
Argumenty funkcji

Argumenty funkcji

Informacje mogą być przekazywane do funkcji przez listę argumentów, która jest separowaną przecinkami listą wyrażeń.

PHP obsługuje przekazywanie argumentów przez wartość (domyślnie), przez referencję , i wartości domyślne argumentów. Listy argumentów o zmiennej długości są obsługiwane tylko w PHP 4 i nowszych; zobacz rozdział Listy argumentów o zmiennej długości i opisy funkcji func_num_args(), func_get_arg(), i func_get_args() aby uzyskać więcej informacji. Podobny efekt może być uzyskany w PHP 3 przez przekazywanie tablicy argumentów do funkcji.

Przykład 17-5. Przekazywanie tablic do funkcji

function pobiera_tablice($wejscie)
{
    echo "$wejscie[0] + $wejscie[1] = ", $wejscie[0]+$wejscie[1];
}

Przekazywanie argumentów przez referencję

Domyślnie, argumenty funkcji są przekazywane przez wartość (a więc jeśli zmienisz wartość argumentu wewnątrz funkcji, nie zmieni się ona poza funkcją). Jeśli chcesz pozwolić funkcji na modyfikację swoich argumentów, musisz przekazać je przez referencję.

Jeśli chcesz, aby argumenty były zawsze przekazywane przez referencję, przed nazwą zmiennej w definicji funkcji wstaw znak ampersand (&):

Przykład 17-6. Przekazywanie argumentów przez referencję

<?php
function dodaj_cos_extra(&$string)
{
    
$string .= 'i coś extra.';
}
$str = 'To jest string, ';
dodaj_cos_extra($str);
echo
$str;    // wyświetla 'To jest string string, i coś extra.'
?>

Wartości domyślne argumentów

Funkcja może definiować, podobnie jest w C++, wartości domyślne dla argumentów skalarnych.

Przykład 17-7. Użycie domyślnych wartości argumentów

<?php
function rob_kawe ($typ = "cappucino")
{
    return
"Robię kubek $typ.\n";
}
echo
rob_kawe ();
echo
rob_kawe ("espresso");
?>

Powyższy kawałek kody wyświetli:

Robię kubek cappucino.
Robię kubek espresso.

PHP pozwala także na korzystanie z tablic i specjalnego typu NULL jako wartości domyślnych.

Przykład 17-8. Używanie nieskalarnych typów jako wartości domyślne

<?php
function rob_kawe($typy = array("cappuccino"), $urzadzenie = NULL)
{
    
$urzadzenie = is_null($urzadzenie) ? "rece" : $urzadzenie;
    return
"Robie kubek ".join(", ", $types)." poprzez $urzadzenie.\n";
}
echo
rob_kawe();
echo
rob_kawe(array("cappuccino", "lavazza"), "ekspres");
?>

Domyślna wartość musi być stałym wyrażeniem, nie (na przykład) zmienną. członkiem klasy lub wywołaniem funkcji.

Zauważ, że używając domyślnych argumentów, argumenty zawierające wartości domyślne powinny być po prawej stronie tych nie zawierających wartości domyślnych; w przeciwnym przypadku funkcja może nie działać tak jak się tego spodziewałeś. Przedstawione to zostało na poniższym przykładzie.

Przykład 17-9. Błędne zastosowanie domyślnych argumentów funkcji

<?php
function robjogurt ($typ = "acidophilus", $smak)
{
    return
"Robię miskę $typ $smak.\n";
}

echo
robjogurt ("malinowy");   // nie działa tak jak się spodziewaliśmy
?>

Powyższy przykład wyświetli:

Warning: Missing argument 2 in call to robjogurt() in 
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Robię miskę malinowy .

Porównaj powyższy przykład z tym:

Przykład 17-10. Poprawne użycie domyślnych argumentów funkcji

<?php
function robjogurt ($smak, $typ = "acidophilus")
{
    return
"Robię miskę $type $flavour.\n";
}

echo
robjogurt ("malinowy");   // działa tak jak się spodziewaliśmy
?>

Powyższy kod wyświetli:

Robię miskę acidophilus malinowy.

Notatka: Od PHP 5, domyślne argumenty funkcji mogą być przekazywane przez referencję.

Listy argumentów o zmiennej długości

PHP 4 i nowsze obsługują listy o zmiennej długości w funkcjach zdefiniowanych przez użytkownika. Jest naprawdę prostę przy użyciu funkcji func_num_args(), func_get_arg() i func_get_args().

Nie wymagana jest żadna specjalna składnia. Listy argumentów mogą być ciągle jawnie podane przy definicji funkcji i będą się zachowywać normalnie.