ARGUMENTY FUNKCJI
Aby funkcja mogła operować na konkretnych danych, trzeba je jakoś do niej przekazać. Właśnie do tego służą argumenty. Przy deklarowaniu funkcji jest to lista zmiennych oddzielonych przecinkami. Przy wywołaniu funkcji podaje się natomiast listę wartości, również oddzielonych przecinkami. PHP wspiera przekazywanie argumentów przez wartość i przez referencje. Dostępne są równiez domyślne wartości argumentów i zmienne liczba argumentów.
Przekazywanie argumentów przez wartość
Typowym sposobem przekazywania argumentów jest ich przekazywanie przez wartość. Spójrzmy na przykład:
<?
function test(argument_1,argument_2){
echo("Podano następujące argumenty\n $argument_1\n $argument_2");
}
?>
|
Wywołanie tej funkcji wygląda następująco:
<?
test("jeden", "dwa");
echo("\n\n");
test(10, 100);
?>
|
Powyższe wywołania funkcji
test() zwracają:
Podano następujące argumenty:
jeden
dwa
Podano następujące argumenty:
10
100
|
Przekazywanie argumentów przez referencję
Domyślnie zmiana wartości argumentu wewnątrz funkcji nie wpływa na wartość argumentu na zewnątrz funkcji. Dzięki referencji możliwa jest zmiana zachowania funkcji. Spójrzmy na taki przykład:
<?
function test(&$text) {
$text .= " [ten tekst dodała funkcja test()]";
}
?>
|
Wywołanie tej funkcji wygląda następująco:
<?
$text = "to jest piękny tekst";
test($tekst);
echo $tekst;
?>
|
Powyższe wywołanie funkcji
test() zwraca:
To jest piękny tekst [ten tekst dodała funkcja test()]
|
Spójrzmy jeszcze na taki przykład:
<?
function test($text) {
$text .= " [ten tekst dodała funkcja test()";
},br>
?>
|
Wywołanie funkcji
test():
<?
$tekst = "To jest piękny tekst";
# tryb normalny
test($tekst);
echo $tekst . "\n";
# referencja
test(&$tekst);
echo $tekst . "\n";
?>
|
Powyższe wywołanie funkcji zwracają:
To jest piękny tekst
To jest piękny tekst [ten tekst dodała funkcja test()]
|
Domyślne wartości argumentów
PHP wspiera obsługę domyślnych wartości argumentów, które nie muszą być wtedy podawane:
<?
function test($argument_1, $argument_2 = "") {
echo("Podano następujące argumenty:\n $argument_1\n $argument_2");
}
?>
|
Oto różne wywołanie tej funkcji:
<?
test("jeden", "dwa");
echo "\n\n";
test(10);
?>
|
Powyższe wywołania funkcji
test() zwracają:
Podano następujące argumenty:
jeden
dwa
Podano następujące argumenty:
10
<nie_podano>
|
Jak widać z powyższego przykładu, drugi argument ma przypisaną wartość domyślną, która jest używana w przypadku niepodania tego argumentu
Argumenty domyślne muszą być umieszczone na końcu aby było możliwe ich niepodawanie. Spójrzmy na przykład zadeklarowanie argumentów (zwróć uwagę na ich kolejność):
<?
function test($argument_2 = "<nie_podano>", $argument_1) {
echo("Podano następujące argumenty:\n $argument_1\n $argument_2");
}
?>
|
Oto różne wywołania tej funkcji:
<?
test("jeden", "dwa");
echo "\n\n";
test(10);
?>
|
Powyższe wywołania funkcji
test() zwracają:
Podano następujące argumenty:
dwa
jeden
<br>
Warning: Missing argument 2 for test() in <lokalizacja pliku> on line <numer linii>
Podano następujące argumenty:
|
Zwrócone ostrzeżenie świadczy o niepodaniu wymaganego argumentu wywołania funkcji.
Przy tego typu deklaracjach argumentów bardzo przydają się funkcje
func_num_args(),
func_get_arg() oraz
func_get_args().
func_num_args()
Funkcja ta zwraca liczbę podanych argumentów wywołania funkcji:
<?
function test() {
$liczba_argumentow = func_num_args();
echo "Podano $liczba_argumentow argumentów!";
}
?>
|
Przykład wywołania funkcji:
<?
test(1, 2, 3, 4, 5);
?>
|
Wynik działania funkcji:
func_get_arg
Funkcja ta zwraca wartość podanego argumentu wywołania funkcji:
<?
function test() {
$liczba_argumentow = func_num_args();
if ($liczba_argumentow >= 3) {
$trzeci = func_get_arg(2);
echo "Trzeci argument: $trzeci";
}
}
?>
|
Przykład wywołania funkcji:
<?
test(1, 2, 3, 4, 5);
?>
|
Wynik działania funkcji:
func_get_args
Funkcja ta zwraca tablicę argumentów wywołania funkcji:
<?
function test() {
$liczba_argumentow = func_num_args();
$argumenty = func_get_args();
echo "Podano następujące argumenty:\n
foreach($argumenty as $key => $value) {
echo " $key) $value\n";
}
}
?>
|
Przykład wywołania funkcji:
<?
test("jeden", "dwa", "trzy", "cztery", "pięć");
?>
|
Wynik działania funkcji:
Podano następujące argumenty:
0) jeden
1) dwa
2) trzy
3) cztery
4) pięć
|