PHP: strefaphp.net
PHP: strefaphp.net



 
Czy odwiedziłeś już te strony? -
dodał: Vengeance

Opis artykułu dodano: 21-07-2004 04:05
Artykuł opisuję sposób na to, aby nasza funkcja mogła przyjmować dowolną liczbę argumentów, a nie z góry ustaloną wcześniej.
dodał: Vengeance | autor: Vengeance | czytano: 2699 razy

Inne materiały do artykułu

Dynamiczna ilość argumentów w funkcjach PHP
---/ 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'410220)."<br />";
echo 
'Wynik 2: '.kalkulator('różnica'6145412)."<br />";
echo 
'Wynik 3: '.kalkulator('suma'42436kalkulator('różnica'3812))."<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!
PHP: strefaphp.net
wyślij email informacje forum download skrypty katalog kursy porady artykuły home współpraca reklama kontakt