Co nowego w PHP 5.6: Argument unpacking

W trzeciej części co nowego w PHP 5.6 przedstawię zagadnienie nazwane argument unpacking. Nie spotkałem się z polskim tłumaczeniem, ale myślę że można to nazwać rozwinięciem lub wypakowaniem argumentów. Jeśli się nie zgadzacie lub macie lepsze tłumaczenie zapraszam do komentowania.

Seria „Co nowego w PHP 5.6”

  1. Nowy operator potęgowania (**).
  2. Variadic functions – funkcje ze zmienna ilością parametrów.
  3. Argument unpacking – rozwijanie/wypakowanie argumentów.
  4. Stosowanie wyrażeń przy definiowaniu pól, parametrów i stałych.
  5. Import funkcji i stałych do przestrzeni nazw.

Na początek zdefiniujemy prostą funkcję, która przekazane parametry będzie łączyła w jeden ciąg znaków, a następnie zwracała go.


function concat($a, $b, $c)
{
    return "$a:$b:$cn";
}

Rozważmy w jaki sposób możemy przekazać parametry do funkcji. Oczywiście możemy po prostu podstawić w miejsce parametrów stałe lub zmienne.


$c = 3;
echo concat(1, 2, $c);

Co natomiast jeśli wartości, które chcemy przekazać do funkcji znajdują się w tablicy? Jakie wtedy mamy opcje? Zdefiniujmy tablicę $arr.


$arr = ['1', '2', '3'];

Aby przekazać teraz wartości elementów tablicy możemy po prostu odwołać się do każdego elementu poprzez indeksy.


echo concat($arr[0], $arr[1], $arr[2]);

Jeśli ktoś bardzo nie lubi odwoływać poprzez indeksy może skorzystać z funkcji list() w następujący sposób.


list($a, $b, $c) = $arr;
echo concat($a, $b, $c);

Zmienia to tylko tyle, że możemy nazwać zmienne w taki sposób aby coś znaczyły, ale pojawia nam się dodatkowa linijka kodu.

Na ratunek przychodzi argument unpacking z wykorzystaniem operatora trzech kropek. Wystarczy po prostu wstawić go przed nazwą zmiennej.


echo concat(...$arr);

Uruchommy skrypt w konsoli i sprawdźmy co zostanie wydrukowane.


1:2:3
1:2:3
1:2:3
1:2:3

Jak widzimy każde wywołanie funkcji drukuje identyczny wynik. Gdy jednak uruchomimy skrypt na PHP < 5.6 dostaniemy taki błąd:


Parse error: syntax error, unexpected '.', expecting ')'

W przypadku gdy w tablicy $arr będzie mniej elementów niż parametrów funkcji to otrzymamy ostrzeżenie.


$arr = ['1', '2'];
echo concat(...$arr);

Warning: Missing argument 3 for concat()

To by było na tyle, myślę że operator trzech kropek wnosi po prostu wygodę w nasze codzienne programistyczne życie zarówno w kwestii przekazywania parametrów do funkcji jak i funkcji ze zmienna liczbą parametrów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *