Funkcja
Fragment kodu PHP, który może być wielokrotnie używany w obrębie aplikacji poprzez wywołanie funkcji. Podstawową korzyścią płynącą z zastosowania funkcji jest możliwość uniknięcia pisania wielokrotnie tych samych fragmentów kodu. Przykładem takiego zastosowania funkcji może być sytuacja, w której strona WWW posiada menu, które wygląda identycznie na wszystkich podstronach. Umieszczenie kodu budującego menu w ramach funkcji umożliwia wywoływanie całego menu za pomocą jednego słowa - nazwy funkcji (z ewentualnymi parametrami), zamiast każdorazowego przepisywania całego kodu menu. Poza oszczędnością miejsca i czasu zyskujemy także mniejszą podatność na błędy. Pośrednią korzyścią jaką osiągamy jest fakt, że w razie konieczności zmodyfikowania naszego przykładowego menu, zmianę możemy wprowadzić tylko raz - w funkcji - a nie tyle razy, ile razy wyświetlamy menu.
Spis treści
Przykład funkcji w PHP
// początek "deklaracji funkcji" function mojaFunkcja(){ echo 'Jestem funkcją!'; // ciało funkcji } // koniec "deklaracji funkcji" mojaFunkcja(); // wywołanie funkcji
Powyższy przykład wyświetli:
Jestem funkcją!
Argumenty funkcji
Przekazanie jednego argumentu
Funkcja może przyjmować argumenty. Argumenty mogą być danymi dowolnego typu, które są przekazywane funkcji podczas jej wywoływania.
function mojaFunkcja($imie){ echo 'Jestem funkcją, którą napisał '; echo $imie; } $argument = 'Kuba'; mojaFunkcja($argument); // wywołanie funkcji z argumentem w postaci zmiennej
Powyższy przykład wyświetli:
Jestem funkcją, którą napisał Kuba
Przekazanie wielu argumentów
Argumentów może być wiele, zależy to od deklaracji funkcji. Rozważmy poniższy przykład z trzema argumetami:
function mojaFunkcja($kto, $jakiego, $co){ echo $kto.' ma '.$jakiego.' '.$co; } mojaFunkcja('Każdy', 'jakiegoś', 'bzika'); // wywołanie funkcji z trzema argumentami
Powyższy przykład wyświetli:
Każdy ma jakiegoś bzika
Argument opcjonalny
Zdarza się, że nie przy każdym wywołaniu funkcji chcemy podawać wartość w argumencie.
function mojaFunkcja($imie, $zarobek=4000){ echo $imie.' zarabia '.$zarobek.'zł'; } mojaFunkcja('Mateusz'); // Wywołujemy
Powyższy kod wyświetli nam
Mateusz zarabia 4000zł
Zaś funkcja wywołana w taki sposób:
mojaFunkcja('Mateusz', 1750);
Wyświetli nam:
Mateusz zarabia 1750zł
Return
Słowo return umieszczone w obrębie funkcji przerywa jej działanie. Jeżeli po słowie umieścimy jakąś wartość, to funkcja wraz z zakończeniem działania zwróci tę wartość. Rozważmy poniższy przykład:
function mojaFunkcja(){ echo 'raz '; echo 'dwa '; return 'a kuku '; // zakończ działanie i zwróć String echo 'trzy'; } $zwrot = mojaFunkcja(); echo $zwrot;
Powyższy przykład wyświetli:
raz dwa a kuku
Jak widać, możliwe jest umieszczenie zwracanej przez funkcję wartości w zmiennej. Możliwe jest także bezpośrednie wyświetlenie zwracanej wartości:
function mojaFunkcja(){ return 'Dzień dobry!'; } mojaFunkcja(); // samo wywołanie funkcji nie wyświetli nic echo mojaFunkcja(); // tym razem wyświetlimy zwracaną przez funkcję wartość
Powyższy przykład wyświetli:
Dzień dobry!
Default
Od PHP 5.6 możliwe jest ustawianie domyślnych argumentów funkcji. W trakcie wykonywania funkcji, aby został użyty ten argument domyślny, należy wstawić default.
<?php function foo($foo = 1, $foobar = 2, $bar) { return "$foo $foobar $bar\n"; } echo foo(3, 5, 6); # wyświetli: 3 5 6 echo foo(default, default, 3); # wyświetli: 1 2 3 ?>
Dowolna liczba argumentów oraz argumenty w postaci tablicy
PHP 5.6 wprowadził także możliwość przekazywania dowolnej liczby argumentów; wówczas dodatkowe argumenty są zapisywane w postaci jednej tablicy jako ostatni argument. W tym celu w trakcie definiowania funkcji używa się operatora ...:
<?php function foo($a, $b, ...$c) { echo "$a $b "; foreach($c as $element) echo "$element "; echo "\n"; } foo(1, 2, 3); # wyświetli: 1 2 3 foo(1, 2, 3, 4); # wyświetli: 1 2 3 4 foo(1, 2, 3, 4, 5);# wyświetli: 1 2 3 4 5 ?>
Oprócz tego, kilka kolejny argumentów możemy przekazać za pomocą jednej tablicy - w takim wypadku także korzysta się z operatora ...:
<?php function bar($a, $b, $c, $d) { echo "$a $b $c $d\n"; } $argumenty_b_i_c = [4, 8]; bar(1, ...$argumenty_b_i_c, 9); # wyświetli: 1 4 8 9 ?>