Autor: 19.05.2023
PHP - techniki pracy z funkcjami
Funkcje są istotną częścią większości języków programowania. W tym artykule poznasz kluczowe techniki pracy z funkcjami w języku PHP. Zaczniemy od podstaw i potem przejdziemy do kilku praktycznych technik pracy.
PHP Developer
Zdobądź umiejętności niezbędne do pracy jako PHP Developer. Ta ścieżka kariery sprawi, że staniesz się pełnoprawnym kandydatem na PHP Developera. Ścieżka zawiera dziesiątki zadań, ćwiczeń oraz projektów, które nauczą cię realnych, przydatnych na rynku pracy umiejętności. Dowiedz się więcej
Parametry funkcji
Przypomnijmy sobie jak działają funkcje w PHP. Od razu przejdźmy do przykładu:
function sum($a, $b) {
echo $a + $b;
}
- Tutaj zdefiniowaliśmy funkcję sum(), która przyjmuje dwa parametry: $a oraz $b. Zauważ, że te parametry to po prostu zmienne, które są częścią tej funkcji.
- Funkcja za pomocą echo wyprowadza do przeglądarki sumę $a + $b.
Teraz kluczowa rzecz:
sum(2, 3)
Podczas wywołania funkcji musisz podać wartości dla $a i $b. W tym przykładzie otrzymamy wynik (sumę) równy 5.
5
Funkcja zwracająca wartość
Funkcja zwracająca wartość
Większość funkcji w PHP zwraca jakąś wartość. Dzięki temu możemy z wynikiem zrobić coś więcej niż tylko wyprowadzić go do przeglądarki. Na przykład możemy go użyć w dowolnej części programu, w dowolnym celu.
function multiply($a, $b) {
return $a * $b;
}
Tutaj mamy funkcję multiply(), która mnoży wartość parametru $a oraz $b. Posiada ona deklarację return, która określa co będzie wartością zwracaną przez funkcję. Ta wartość to będzie po prostu wynik mnożenia.
Teraz możesz przypisać do jakiejś zmiennej wynik działania funkcji, czyli to co funkcja zwróci:
$result = multiply(2, 4);
Od tego momentu zmienna $result przechowuje wynik mnożenia zwrócony przez funkcję multiply().
Argumenty (parametry) domniemane
Czasami chcielibyśmy tworzyć domyślne parametry dla funkcji. Pominięcie niektórych parametrów może być w niektórych sytuacjach pożądane. Spójrz na poniższe rozwiązanie:
<?php
function printLine($size, $sign) {
for($i = $size; $i > 0; $i--) {
echo $sign;
}
echo "\n";
}
printLine(5, '*');
printLine(4, '*');
printLine(3, '*');
?>
Wynik działania programu:
*****
****
***
Można zoptymalizować to zadanie. Zwróć uwagę, że niepotrzebnie wiele razy wywołujemy funkcje z parametrem * (gwiazdka). Można wprowadzić domyślny parametr w funkcji w taki sposób:
<?php
function printLine($size, $sign = '*') {
for($i = $size; $i > 0; $i--) {
echo $sign;
}
echo "\n";
}
printLine(5);
printLine(4);
printLine(3);
?>
Efekt działania programu jest identyczny jak we wcześniej zaprezentowanym przykładzie. Spójrz jak przy małym nakładzie pracy można zaoszczędzić wiele miejsca.
*****
****
***
Jeżeli nie podasz drugiego parametru w wywołaniu funkcji printLine wówczas wartość parametru $sign przyjmie wartość domyślną przypisaną do tego parametru czyli ‘*’.
Kiedy zaczniesz bawić się argumentami domyślnymi w funkcjach musisz mieć na uwadze kilka aspektów:
Jeżeli w deklaracji funkcji podamy domyślną wartość dla argumentu to musimy ją podać dla wszystkich kolejnych argumentów na liście:
<?php
// nieprawidłowe deklaracje
function printLine1($a, $b = 1, $c) { }
function printLine2($a = 1, $b, $c) { }
//prawidłowe deklaracje
function printLine3($a, $b, $c = 2) { }
function printLine4($a, $b = 1, $c = 2) { }
?>
Jeżeli w funkcji znajduje się wiele parametrów domniemanych to opuszczając jeden z nich musisz opuścić kolejne:
<?php
function printLine($a, $b = 100, $c = 200, $d = 300) { }
//prawidłowe deklaracje
printLine(10);
printLine(10, 1);
printLine(10, 1, 2);
printLine(10, 1, 2, 3);
// nieprawidłowe deklaracje
printLine(10, , 2);
printLine(10, , , 3);
?>
Nie możesz opuszczać parametrów. Jeśli zdecydujesz się pominąć jeden argument domyślny, wówczas musisz pominąć kolejne parametry zdając się na ich wartości domyślne.
Przekazywanie parametrów przez wartość / referencję
Przekazywanie przez wartość
Poniższy przykład obrazuje w jaki sposób możesz przesłać parametr przez wartość do funkcji:
<?php
function showValue($digit) {
$digit = 14;
echo "Zmienna w funkcji: $digit \n";
}
$digit = 17;
echo "Zmienna przed wywołaniem funkcji: $digit \n";
showValue($digit);
echo "Zmienna po wywołaniu funkcji: $digit \n";
?>
Jak myślisz, jaki będzie efekt działania Naszego programu? Oto wynik:
Zmienna przed wywołaniem funkcji: 17
Zmienna w funkcji: 14
Zmienna po wywołaniu funkcji: 17
Zmieniamy wartość zmiennej w funkcji, ale w końcowym rozrachunku i tak jej wartość wynosi 17. Dzieje się tak dlatego, że parametr w funkcji jest tak naprawdę kopiowany i jego życie trwa tak długo, jak długo trwa funkcja. Zmienna ginie wraz z końcem bloku funkcji.
Przekazywanie przez referencję
Dodajmy teraz troszkę czaru programistycznego zawierającego niewielką szczyptę zmian. Naprawdę zmieni się bardzo niewiele, a zobaczysz jakie ogromne konsekwencje niesie za sobą przekazywanie parametrów przez referencję.
<?php
function showValue(&$digit) {
$digit = 14;
echo "Zmienna w funkcji: $digit \n";
}
$digit = 17;
echo "Zmienna przed wywołaniem funkcji: $digit \n";
showValue($digit);
echo "Zmienna po wywołaniu funkcji: $digit \n";
?>
Wynik działania naszego programu będzie całkiem odmienny:
Zmienna przed wywołaniem funkcji: 17
Zmienna w funkcji: 14
Zmienna po wywołaniu funkcji: 14
Program sam w sobie nie uległ zmianie. Zmienił się jedynie sposób przekazania parametru do funkcji. Zwróć uwagę, że przed parametrem znajduje się znak specjalny &. To właśnie ten znak spowoduje, że nasz parametr nie zostanie skopiowany tylko przekażemy do naszej funkcji oryginał. Dokonując zmian w funkcji powodujesz, że oryginał ulegnie zmianie. Stąd taki wynik, a nie inny.
Zmienna liczba argumentów
Czasami może zdarzyć się sytuacja, że nie będziesz mieć pewności ile możesz przesłać argumentów do funkcji. Z pomocą przyjdzie nam tzw. splat operator.
Splat operator rozpoznasz po charakterystycznych “...” występujących przed nazwą parametru funkcji. Taki operator umożliwia nam przesłanie dowolnej liczby argumentów. Pamiętaj, że taki splat operator może być używany tylko przez ostatni parametr funkcji.
<?php
function printData(...$values) {
foreach($values as $value) {
echo "$value \n";
}
}
printData(1,2);
printData("Tom", "John", "Mike");
?>
Spójrz na parametr funkcji printData(). Taka dziwna konstrukcja to właśnie tzw. splat operator. Dzięki takiemu specyficznemu operatorowi możemy przekazywać do funkcji bliżej nieokreśloną ilość parametrów (inaczej mówiąc: dowolną).
A tak wygląda efekt działania programu:
1
2
Tom
John
Mike
Deklaracja takiego parametru musi być ściśle określona. Teraz przedstawimy poprawną i błędną deklarację.
Błędne użycie operatora splat:
<?php
function printData(...$values, $digit) { }
?>
Poprawne użycie operatora splat:
<?php
function printData(...$values) { }
function printData($digit, ...$values) { }
?>
Argument (parametr) przyjmujący dowolną ilość wartości musi być umieszczony na końcu listy parametrów funkcji. Dotyczy to sytuacji, gdy funkcja przyjmuje więcej niż jeden parametr.
PHP Developer
Zdobądź umiejętności niezbędne do pracy jako PHP Developer. Ta ścieżka kariery sprawi, że staniesz się pełnoprawnym kandydatem na PHP Developera. Ścieżka zawiera dziesiątki zadań, ćwiczeń oraz projektów, które nauczą cię realnych, przydatnych na rynku pracy umiejętności. Dowiedz się więcej
Podsumowanie
Funkcje to bardzo istotna część programowania w PHP. Dzięki nim możemy wielokrotnie wykorzystać ten sam blok kodu. W artykule pokazaliśmy kluczowe techniki pracy z funkcjami.
Jeśli chcesz dowiedzieć się więcej na temat funkcji, i nie tylko to rozpocznij Ścieżkę Kariery PHP Developer. Z tą ścieżką poznasz język PHP od podstaw do poziomu średniozaawansowanego. Ścieżka kończy się Egzaminem, który uprawnia cię do posługiwania się Certyfikatem Specjalisty.