Dzisiaj27 listopada, 2020

Gdybyśmy chcieli użyć danego fragmentu kodu więcej niż 1 raz, powinniśmy użyć funkcji. Funkcje w PHP buduje się bardzo prosto, warto zaznaczyć jednak, że w nazwie funkcji nie jest rozróżniana wielkość znaków. Diagram częściowo opisujący budowę funkcji:

Gdzie $a i $b to argumenty (parametry) funkcji. Użyliśmy konstrukcji return aby zwrócić dane. Funkcja ukazana na diagramie bez tego co zostało pokazane jako opcjonalne wyglądałaby tak:

<?php

function sum($a,$b) {
    return $a+$b;
}

Jednak wynik nie musiałby być typu całkowitego iponieważ tak nie zadeklarowaliśmy. Aby użyć funkcji w kodzie wystarczy napisać jej nazwę oraz przesłać do niej argumenty, jeśli są one wymagane. Czyli:

<?php

function sum($a,$b) {
    return $a+$b;
}

echo sum(12,5); // wyświetli 17

Oczywiście funkcje mogą zwracać lub nie zwracać danych. Poniżej przykład funkcji, która nie zwraca danych:

<?php

function welcome($name) {
    echo "Witaj" . $name . "!";
}

echo welcome("Adam"); // Witaj Adam!

Opcjonalna domyślna wartość parametru

Co jeśli osoba nie prześle argumentu do funkcji? Możemy w tym celu ustalić domyślną wartość parametru, która będzie tylko wtedy, gdy nie argument nie zostanie przesłany. Przykład:

<?php

function welcome($name = "Nieznany") { // opcjonalna wartość argumentu
    echo "Witaj" . $name . "!";
}

echo welcome(); // Witaj Nieznany!

Funkcja zwracająca konkretny typ danych

Domyślnie PHP zwraca typ danych, który najbardziej pasuje. Od PHP 7 możemy jednak zadeklarować przez nas wybrany typ danych, który ma zostać zwrócony przez funkcję. Przykład:

<?php

function sum($a,$b):int {
    return $a+$b;
}

echo sum(3.14,13.37); // 16

W tym przypadku zostanie zwrócony typ float (zmiennoprzecinkowy). Należy po nawiasach użyć znaku „:” a po nim napisać typ danych jak ma zostać zwracany. Przed PHP 7 robiło się to w następujący sposób:

<?php

function sum($a,$b) {
    return (int) ($a+$b);
}

echo sum(3.14,13.37); // 16

Dynamiczne wywoływanie funkcji

Co jeśli chcemy wywołać funkcję używając innej nazwy? Wystarczy w tym celu przypisać nazwę funkcję jako wartość do nazwy zmiennej, do której będziemy chcieli się odwołać jako funkcji:

<?php

function sum($a,$b) {
    return $a+$b;
}

$dodaj = "sum";
echo $dodaj(12,5); // 17

Funkcję też możemy zapisać jako wartość zmiennej i wtedy będzie to funkcja anonimowa, którą omówię za chwilę:

<?php

$dodaj = function ($a,$b) {
    return $a+$b;
};
echo $dodaj(12,5); // 17

W wyżej wymienionym przypadku nie zapomnij o zakończeniu instrukcji używając ;.

Przekazywanie argumentów przez referencję

PHP kopiuje wartości argumentów zamiast działać na oryginalnych danych. Jeśli chcemy operować na oryginalnych danych, musimy użyć do tego referencji – czyli zadeklarować w funkcji, że chcemy operować na pierwotnych argumentach niż na ich kopiach. Referencję w PHP zapisujemy w postaci znaku „&„. Poznane wcześniej funkcje sortujące działania właśnie na referencjach:

zauważ znak & przy parametrze #0

Przykład funkcji działającej w oparciu o referencję:

<?php

function odejmij(&amp;$a, $b = 0) { 
    $a = $a - $b; // równie dobrze możemy zapisać $a -= $b;
}

$a = 10;
odejmij($a,3);
echo $a; // 7

Funkcja w funkcji

Funkcje możemy umieścić wewnątrz innej funkcji, jednak żeby ją później wywołać należy wywołać najpierw wszystkie funkcje nadrzędne. Potraktuj to jako ciekawostkę, zazwyczaj się tego nie stosuje. Przykład:

<?php

function a() {
    echo "a";
    function b() {
        echo "b";
    }
}

// b(); <-- otrzymalibyśmy błąd o niezidentyfikowanej funkcji
a(); // a
b(); // b
// a(); <-- to już nie zadziała, teraz możemy użyć tylko funkcji podrzędnych

Funkcje anonimowe

Funkcje anonimowe (lambda) to funkcja do której jak nazwa sugeruje, nie przypisujemy nazwy. Zazwyczaj używamy je jednorazowo w argumencie funkcji, która używa wywoływania zwrotnego (callback). Przykładem użycia funkcji anonimowej jest użycie jej w funkcji array_map. Przykład:

<?php

$array = ['Aleksander','Michał','Ilona'];

$arr = array_map(
    function($name) {
        return strlen($name);
    },
    $array
);

Utworzona tablica arr będzie zawierała w sobie długości imion z tablicy array.

Funkcja ze zmienną liczbą argumentów

Gdy nie wiemy ile argumentów ma zostać przesłane do funkcji, może skorzystać ze tzw. splat operator – należy dopisać „” przed nazwą zmiennej. Umożliwia on nam przesłanie dowolnej liczby argumentów. Przykład:

<?php

function sum(...$numbers) {
    $sum = 0;
    foreach($numbers as $number) {
        $sum += $number;
    }
    return $sum;
}
echo sum(1,3,3,7); // 14

Pamiętaj o tym, że tylko ostatni parametr funkcji może używać splat operator’a – gdyż wprowadzenie dalszych parametrów nie ma sensu, ponieważ i tak nie zostaną one odczytane. W poprzednich wersjach PHP korzystało się z funkcji func_get_args, aby zrobić funkcję ze zmienną liczbą argumentów. Ze splat operator’a możemy też skorzystać przesyłając tablice jako argument:

<?php

function sum(...$numbers) {
    $sum = 0;
    foreach($numbers as $number) {
        $sum += $number;
    }
    return $sum;
}
$numbers[] = 1;
$numbers[] = 5;

echo sum(...$numbers); // 6

Do dalszej części kursu niezbędna będzie znajomość systemu zarządzania bazą danych. W tym kursie zdecydowałem się na relacyjną bazę danych MySQL.

Udostępnij artykuł
guest
0 komentarzy
Inline Feedbacks
View all comments