---/ Wstęp /---
Jak często tworzysz własne funkcje w swoich skryptach PHP ?
A jak często denerwowało cię to, że w PHP funkcja nie może
mieć dynamicznej liczby argumentów ?
Otóż to nie prawda! PHP udostępnia kilka funkcji pozwalających
na uruchamianie funkcji ze zmieniającą się dynamicznie
liczbą argumentów.
---/ Część 1 /---
Tymi funkcjami są:
func_get_arg -- Zwraca jeden element z listy argumentów przekazanych do funkcji
func_get_args -- Zwraca wszystkie argumenty przekazane do funkcji jako tablicę
func_num_args -- Zwraca liczbę argumentów przekazanych do funkcji
Oto przykładowy kod pokazujący możliwości tych funkcji.
Kod:
<?php
/* zauważ, że nie definiujemy tu żadnych argumentów */
function test()
{
$liczba_argumentow = func_num_args();
echo "Liczba argumentów: ".$liczba_argumentow."\n";
/* jeśli liczba argumentów jest większa lub równa 3
to przejdź do echo() */
if($liczba_argumentow >= 3)
/* po wywołaniu func_get_arg(3) uzyskamy
wartość czwartego argumentu */
echo("Argument nr 3 ma wartość: ". func_get_arg(3));
}
test('phpworld', 'zaprasza', 'wszystkich', 'intern autów');
?>
Wynikiem działania takiego skryptu będzie:
Cytat:
Liczba argumentów: 4
Argument nr 3 ma wartość: intern autów
Zauważ, że funkcja func_get_arg() liczy argumenty od zera (0).
Czyli np. aby pobrać ósmy argument przekazany do naszej funkcji
należy wywołać funkcje func_get_arg() z argumentem o jeden mniejszych,
czyli w naszym przypadku func_get_arg(7)
Jak widzimy dynamiczna ilość argumentów daje nam całkiem spore pole do działania.
Napiszmy teraz coś pożytecznego.
---/ Część 2 /---
W częśći drugiej napiszemy mały kalkulator. Jednak aby wykorzystać
dopiero co poznane metody będzie on sumował/odejmował liczby z dowolnej
ilości argumentów.
Oto kod:
Kod:
<?php
/* zauważ, że nie definiujemy tu żadnych argumentów */
function kalkulator()
{
/* pobieramy liczbę przekazanych argumentów */
$argc = func_num_args();
$wynik = 0;
/* jeśli liczba agumentów jest większa lub równa trzem... */
if($argc >= 3)
{
/* jeśli pierwszy argument równy jest 'suma' to */
if(func_get_arg(0) == 'suma')
{
for($i = 1; $i < $argc; $i++)
{
/* w pętli dodajemy do siebie kolejno
wszystkie argumenty funkcji od pierwszego
wzwyż */
$wynik += func_get_arg($i);
}
}
/* jeśli pierwszy argument równy jest 'roznica' to */
elseif(func_get_arg(0) == 'różnica')
{
for($i = 1; $i < $argc; $i++)
{
/* w petli odejmujemy od siebie kolejno
wszystkie argumenty funkcji od pierwszego
wzwyż */
$wynik -= func_get_arg($i);
}
}
return $wynik;
}
else
{
echo 'Użycie: kalkulator($działanie, $liczba1, $liczba2, $n-liczba'." \n";
}
}
echo 'Wynik 1: '.kalkulator('suma', 4, 10, 2, 20)."<br />";
echo 'Wynik 2: '.kalkulator('różnica', 6, 14, 54, 12)."<br />";
echo 'Wynik 3: '.kalkulator('suma', 4, 24, 36, kalkulator('różnica', 3, 8, 12))."<br />";
?>
Wynik działania skryptu:
Cytat:
Wynik 1: 36
Wynik 2: -86
Wynik 3: 41
Jak widać stworzyliśmy całkiem przyjemną funkcję :)
Przejdźmy teraz do 3 części aby poznać funkcję func_get_args()
---/ Część 3 /---
Do tej pory korzystaliśmy z funckji func_get_arg() której
jako parametr podawaliśmy numer argumentu a wzamian otrzymywaliśmy
jego wartość. Oprócz tej funkcji istnieje jeszcze druga func_get_args().
Różnią się one tym, że ta druga zwraca tablicę (typ array) ze wszystkimi
wartościami argumentów.
Przykład:
Kod:
<?php
/* zauważ, że nie definiujemy tu żadnych argumentów */
function pokaz_argumenty()
{
/* pobieramy liczbę przekazanych argumentów */
$argc = func_num_args();
/* pobieramy wszystkie argumenty i zapisujemy jako tablicę */
$argv = func_get_args();
for($i = 0, $c = count($argv); $i < $c; $i++)
{
/* w pętli odczytujemy i wyświetlamy wszystkie argumenty
przekazane do funkcji */
printf("Argument %d: %s <br>", $i, $argv[$i]);
}
}
pokaz_argumenty('phpworld', 'zaprasza', 'wszystkich', 'intern autów');
?>
Wynik jaki uzyskamy po uruchomieniu tego skryptu:
Cytat:
Argument 0: phpworld
Argument 1: zaprasza
Argument 2: wszystkich
Argument 3: intern autów
Jak widzimy func_get_args() zapisało do zmiennej $argv wszystkie argumenty
jako tablicę, której elementami są wartości ww. argumentów.
I teraz aby np. odnieść się do czwartego argumentu należy zastosować zapis
w stylu:
$argv[3];
Dlaczego 3 a nie 4 ? Gdyż indeksy tablic są liczone od 0. Koniecznie
to zapamiętaj.
---/ Zakończenie /---
Bo więcej na temat ww. funkcji zapraszam na poszczególne strony podręcznika PHP
http://pl.php.net/manual/pl/function.func-num-args.php
http://pl.php.net/manual/pl/function.func-get-arg.php
http://pl.php.net/manual/pl/function.func-get-args.php
------------------------------------------------------
autor: Vengeance - vee(at)irc(dot)pl
Artykułu NIE wolno publikować bez zgody autora!