6. PHP – funkcje – definiowanie własnych funkcji oraz zwracanie wartości przez funkcje. Funkcje wbudowane.


Funkcje

Funkcja to nazwany, wielokrotnie używalny fragment kodu, który:

  • Wykonuje określone zadanie
  • Może przyjmować argumenty (parametry)
  • Może zwracać wartość
  • Pomaga unikać powtórzeń w kodzie (zasada DRY – Don’t Repeat Yourself)

W celu zdefiniowania funkcji należy podać jej nazwę, argumenty i instrukcje:

function przykladowa_nazwa_funkcji ($argument1,$argument2,$argument3.........) 
{
instrukcja1;
instrukcja2;
instrukcja3......
}

Zasady nazywania funkcji:

  • Nazwa może zawierać litery, cyfry, podkreślenia
  • Nazwa musi zaczynać się od litery lub podkreślenia
  • Konwencja: camelCase lub snake_case
  • Nazwa powinna opisywać, co funkcja robi

Funkcje mogą zwracać konkretne wartości lub wyświetlać komunikat.

Aby wywołać funkcję wystarczy podać jej nazwę z nawiasami!

przykladowa_nazwa_funkcji(); // wywołanie funkcji w kodzie

echo i return

echo nie zwraca wartości tylko wyświetla wynik na ekranie;

return zwraca wartość, którą możemy później wykorzystać jako zmienną.

Aspekt echo return
Zwraca wartość
Wyświetla na ekranie
Można przypisać do zmiennej
Kończy wykonanie funkcji
function funkjaZEcho($x) {
    echo $x * 2;
}

function funkcjaZReturn($x) {
    return $x * 2;
}

// Echo - nie możemy użyć wyniku
$wynik1 = funkjaZEcho(5); // wyświetli 10
var_dump($wynik1); // NULL - nic nie zostało zwrócone

// Return - możemy użyć wyniku
$wynik2 = funkcjaZReturn(5); // nic nie wyświetli
var_dump($wynik2); // int(10) - wartość została zwrócona
echo $wynik2; // wyświetli 10

Przykład funkcji bez argumentów:

function wyswietl_tekst() // deklaracja funkcji bez argumentów
{
   echo "Witam serdecznie!";  // instrukcje do wykonania
}

wyswietl_tekst(); //ponieważ wewnątrz funkcji jest echo to dostaniemy napis: Witam serdecznie!

Przykład funkcji z argumentami:

function dodawanie($liczba1, $liczba2) 
{
   $wynik = $liczba1+$liczba2;
   echo $wynik;
}

dodawanie(2,3); //ponieważ wewnątrz funkcji jest echo to dostaniemy napis: 5

Funkcja zwracająca wartość

function dodawanie($liczba1, $liczba2) {
    $wynik = $liczba1 + $liczba2;
    return $wynik;
}

echo dodawanie(2, 3); // Wynik: 5
$suma = dodawanie(10, 20); // $suma = 30

Nowoczesna składnia funkcji (PHP 7.0+)

Deklaracje typów argumentów

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

echo dodawanie(5, 10); // 15
// echo dodawanie(5.5, 10.2); // TypeError w strict mode

Strict types

Wymuszenie ścisłego sprawdzania typów bez automatycznej konwersji.

Po co?

  • Eliminuje ukryte konwersje typów (type juggling)
  • Wyłapuje więcej błędów na etapie wywołania funkcji
  • Kod jest bardziej przewidywalny

Jak włączyć? Dodaj na samym początku pliku PHP: declare(strict_types=1);

UWAGA! declare(strict_types=1) działa tylko w pliku, w którym został zadeklarowany (nie jest globalny).

// Bez strict_types (domyślnie - tryb coercive)
function suma(int $a, int $b): int {
    return $a + $b;
}

echo suma(5, 10);      // 15
echo suma("5", "10");  // 15 - stringi automatycznie skonwertowane na int!
echo suma(5.9, 10.1);  // 15 - float automatycznie obcięty do int!

// Ze strict_types
declare(strict_types=1);

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

echo suma(5, 10);      // 15 ✓
// echo suma("5", "10");  // TypeError: Argument must be of type int, string given
// echo suma(5.9, 10.1);  // TypeError: Argument must be of type int, float given

Nullable Types (Typy dopuszczające null) – PHP 7.1+

Możliwość zaakceptowania wartości null oprócz określonego typu.

Po co?

  • Funkcja może otrzymać wartość opcjonalną
  • Jasno komunikuje, że brak wartości jest dopuszczalny
  • Alternatywa dla wartości domyślnych

Składnia: Dodaj ? przed typem

// Bez nullable - null nie jest dozwolone
function powitanie(string $imie): string {
    return "Witaj, $imie!";
}

// powitanie(null); // TypeError

// Z nullable - null jest dozwolone
function powitanie(?string $imie): string {
    if ($imie === null) {
        return "Witaj, nieznajomy!";
    }
    return "Witaj, $imie!";
}

echo powitanie("Jan");   // Witaj, Jan!
echo powitanie(null);    // Witaj, nieznajomy!

Union Types (Typy złożone) – PHP 8.0+

Możliwość określenia, że funkcja akceptuje jeden z kilku typów.

Po co?

  • Funkcja może pracować z różnymi typami danych
  • Bardziej elastyczne niż pojedynczy typ
  • Lepsze niż mixed (zbyt ogólne)
  • Czytelniejsze niż komentarze PHPDoc

Składnia: Typy oddzielone | (pipe)

function formatuj(int|float $liczba): string {
    return number_format($liczba, 2);
}

echo formatuj(10);      // 10.00
echo formatuj(10.567);  // 10.57

Named Arguments (Nazwane argumenty) – PHP 8.0+

Przekazywanie argumentów do funkcji przez podanie ich nazw zamiast kolejności.

Po co?

  • Nie musisz pamiętać kolejności parametrów
  • Możesz pominąć parametry opcjonalne (z wartościami domyślnymi)
  • Kod jest bardziej czytelny
  • Łatwiej wywołać funkcje z wieloma parametrami
function stworzUzytkownika(
    string $imie,
    string $email,
    int $wiek = 18,
    bool $aktywny = true
) {
    // ...
}

// Stary sposób - musimy pamiętać o kolejności
stworzUzytkownika("Jan", "jan@example.com", 25, true);

// Nowy sposób - możemy podać tylko wybrane argumenty
stworzUzytkownika(
    email: "jan@example.com",
    imie: "Jan",
    wiek: 25
);

Arrow Functions (Funkcje strzałkowe) – PHP 7.4+

Skrócona składnia dla prostych funkcji anonimowych (zamknięć).

Po co?

  • Znacznie krótszy zapis dla prostych funkcji
  • Automatyczne dziedziczenie zmiennych z zakresu nadrzędnego (bez use)
  • Lepiej czytelne przy prostych operacjach
  • Idealne do callbacks (array_map, array_filter, etc.)

Składnia: fn(parametry) => wyrażenie

Kluczowe cechy:

  • Składa się tylko z jednego wyrażenia (nie można użyć wielu instrukcji)
  • Automatycznie zwraca wartość wyrażenia (nie trzeba pisać return)
  • Automatycznie importuje zmienne z zakresu nadrzędnego (nie trzeba use)
// Tradycyjna funkcja anonimowa
$kwadrat = function($x) {
    return $x ** 2;
};

// Arrow function - krótsza składnia
$kwadrat = fn($x) => $x ** 2;

echo $kwadrat(5); // 25

// Przydatne z array_map
$liczby = [1, 2, 3, 4, 5];
$kwadraty = array_map(fn($x) => $x ** 2, $liczby);
print_r($kwadraty); // [1, 4, 9, 16, 25]

Argumenty domyślne

function powitanie($imie = "Gość") {
    return "Witaj, $imie!";
}

echo powitanie("Jan");  // Witaj, Jan!
echo powitanie();       // Witaj, Gość!

UWAGA! Argumenty z wartościami domyślnymi muszą być na końcu listy parametrów!

// ŹLE
function zle($a = 5, $b) { }

// DOBRZE
function dobrze($b, $a = 5) { }

Zmienna liczba argumentów

//Sposób tradycyjny
function suma() {
    $args = func_get_args();
    return array_sum($args);
}

echo suma(1, 2, 3, 4, 5); // 15

//Spread operator (PHP 5.6+)
function suma(...$liczby): int {
    return array_sum($liczby);
}

echo suma(1, 2, 3, 4, 5); // 15

// Możemy też rozwinąć tablicę
$liczby = [10, 20, 30];
echo suma(...$liczby); // 60

Zasięg zmiennych

Zmienne lokalne

function test() {
    $lokalna = "Jestem lokalna";
    echo $lokalna;
}

test(); // Jestem lokalna
// echo $lokalna; // Błąd: niezdefiniowana zmienna

Zmienne globalne (unikaj)

$globalna = "Jestem globalna";

function test() {
    global $globalna;
    echo $globalna;
}

test(); // Jestem globalna

NIE UŻYWAJ zmiennych globalnych!

Dlaczego?

  • Trudne do debugowania
  • Ryzyko konfliktów nazw
  • Zagrożenie bezpieczeństwa
  • Utrudniają testowanie
  • Naruszają zasady czystego kodu

Zamiast tego – przekazuj jako argumenty:

// ŹLE
$podatek = 0.23;
function obliczBrutto() {
    global $podatek;
    // ...
}

// DOBRZE
function obliczBrutto(float $netto, float $podatek): float {
    return $netto * (1 + $podatek);
}

echo obliczBrutto(100, 0.23); // 123

Zmienne statyczne

function licznik() {
    static $count = 0;
    $count++;
    return $count;
}

echo licznik(); // 1
echo licznik(); // 2
echo licznik(); // 3

Zastosowanie: Liczniki, cache, singleton pattern.

Przekazywanie przez referencję

Wartość vs Referencja

// Przekazywanie przez wartość (domyślne)
function podwojPrzezWartosc($x) {
    $x *= 2;
}

$liczba = 10;
podwojPrzezWartosc($liczba);
echo $liczba; // 10 - nie zmienione

// Przekazywanie przez referencję (&)
function podwojPrzezReferencje(&$x) {
    $x *= 2;
}

$liczba = 10;
podwojPrzezReferencje($liczba);
echo $liczba; // 20 - zmienione!

UWAGA! Używaj referencji tylko gdy naprawdę potrzebujesz modyfikować oryginalną zmienną.

Funkcje rekurencyjne

Funkcja rekurencyjna to funkcja, która wywołuje samą siebie.

Przykład: Silnia

function silnia(int $n): int {
    if ($n <= 1) {
        return 1; // warunek stopu
    }
    return $n * silnia($n - 1);
}

echo silnia(5); // 120 (5 * 4 * 3 * 2 * 1)

Przykład: Fibonacci

function fibonacci(int $n): int {
    if ($n <= 1) {
        return $n;
    }
    return fibonacci($n - 1) + fibonacci($n - 2);
}

echo fibonacci(10); // 55

UWAGA! Rekurencja może być nieefektywna dla dużych wartości (przepełnienie stosu). Często lepsze są iteracyjne rozwiązania lub memoizacja.

Przykładowe funkcje

Funkcja formatująca przekreślenie

function skresl(string $text): string {
return "<s>$text</s>";
}

echo "To jest tekst niesformatowany<br>";
echo skresl("to jest tekst przekreślony.");

Funkcja kantor przeliczająca wartość kupna EUR na PLN wg podanego kursu

function kantor(float $kurs, float $kwota): array {
return [
'kwota_euro' => $kwota,
'kurs' => $kurs,
'kwota_pln' => round($kwota * $kurs, 2)
];
}

$wynik = kantor(4.3051, 10);
echo "Kupno {$wynik['kwota_pln']} PLN za {$wynik['kwota_euro']} EUR";

Funkcja, która za pomocą znaków * (gwiazdki) narysuje trójkąt.

function rysujTrojkat(int $wysokosc): void {
echo '<pre>';
for ($i = 1; $i <= $wysokosc; $i++) {
echo str_repeat(' ', $wysokosc - $i);
echo str_repeat('*', 2 * $i - 1);
echo "\n";
}
echo '</pre>';
}

rysujTrojkat(5);

 Funkcja, która za pomocą znaków * (gwiazdki) narysuje „koło”.

function rysujKolo(int $promien): void {
echo '<pre>';
for ($y = -$promien; $y <= $promien; $y++) {
for ($x = -$promien; $x <= $promien; $x++) {
if ($x**2 + $y**2 <= ($promien + 0.3)**2) {
echo '*';
} else {
echo ' ';
}
echo ' ';
}
echo "\n";
}
echo '</pre>';
}

rysujKolo(10);

Funkcja rysująca tabelę w HTML składająca się z podanej ilości wierszy i kolumn.

function rysujTabele(int $wiersze, int $kolumny): void {
echo '<table border="1">';

for ($w = 1; $w <= $wiersze; $w++) {
echo '<tr>';
for ($k = 1; $k <= $kolumny; $k++) {
echo "<td>W$w K$k</td>";
}
echo '</tr>';
}

echo '</table>';
}

rysujTabele(4, 5);

//z HTML
function generujTabele(int $wiersze, int $kolumny): string {
$html = '<table border="1">';

for ($w = 1; $w <= $wiersze; $w++) {
$html .= '<tr>';
for ($k = 1; $k <= $kolumny; $k++) {
$html .= "<td>W$w K$k</td>";
}
$html .= '</tr>';
}

$html .= '</table>';
return $html;
}

echo generujTabele(4, 5);

Funkcja rysująca tabliczkę mnożenia.

function tabliczkaMnozenia(int $rozmiar): void {
echo '<table style="border-collapse: collapse;">';

for ($i = 1; $i <= $rozmiar; $i++) {
echo '<tr>';
for ($j = 1; $j <= $rozmiar; $j++) {
$wynik = $i * $j;
$style = 'border: 1px solid black; padding: 5px; text-align: center;';

if ($i == 1 || $j == 1) {
$style .= ' background-color: #333; color: white;';
}

echo "<td style='$style'>$wynik</td>";
}
echo '</tr>';
}

echo '</table>';
}

tabliczkaMnozenia(10);

Ciąg Fibonacciego PHP

function fibonacci(int $n): array {
if ($n <= 0) {
return [];
}

if ($n == 1) {
return [0];
}

$ciag = [0, 1];

for ($i = 2; $i < $n; $i++) {
$ciag[] = $ciag[$i - 1] + $ciag[$i - 2];
}

return $ciag;
}

$wynik = fibonacci(10);
echo implode(' ', $wynik); // 0 1 1 2 3 5 8 13 21 34
echo "\n10. elementem ciągu Fibonacciego jest " . end($wynik);

Funkcje wbudowane

Pełną listę funkcji znajdziecie w dokumentacji PHP,  poniżej najczęściej wykorzystywane.

Funkcje daty i czasu – opracowane w temacie PHP – obsługa daty i czasu

Funkcje operacji na ciągach – opracowane w temacie PHP. Łańcuchy znaków i wyrażenia regularne.

Funkcje operacji na katalogach – opracowane w temacie PHP – operacje na strukturze systemu plików

Funkcje operacji na plikach – opracowane w temacie PHP – Operacje na plikach

Funkcje tablicowe – opracowane w temacie PHP – operacje na tablicach

phpinfo()

Wyświetla informacje o konfiguracji serwera.

<?php phpinfo(); ?>

 

Funkcje obsługi zmiennych

Pełną listę funkcji znajdziecie w dokumentacji PHP,  poniżej najczęściej wykorzystywane.

 

empty()

ustala czy zmienna jest pusta.

$zmienna=0;
if (empty($zmienna)) { echo '$var jest równe zero, puste lub w ogóle nie zostało ustalone';}

Następujące wartości są uważane za puste:

  • „” (pusty ciąg)
  • 0 (0 jako integer)
  • 0.0 (0 jako float)
  • „0” (0 jako string)
  • NULL
  • FALSE
  • [] (pusta tablica)
  • niezidentyfikowana zmienna

 

gettype() i get_debug_type()

pobiera typ zmiennej

echo gettype(1);         // integer
echo gettype(1.5); // double
echo gettype(null); // NULL
echo gettype('tekst'); // string
echo gettype([]); // array
echo gettype(true); // boolean

//Nowoczesne podejście (PHP 8.0+):
echo get_debug_type(1); // int
echo get_debug_type(1.5); // float
echo get_debug_type('tekst'); // string

is_null()

ustala czy zmienna jest ustawiona na NULL

$zmienna = null;

if (is_null($zmienna)) {
echo "Zmienna jest NULL";
}

// Równoważne z:
if ($zmienna === null) {
echo "Zmienna jest NULL";
}

 

is_numeric()

sprawdza czy zmienna jest liczbą, lub liczbowym stringiem

var_dump(is_numeric("42"));      // true
var_dump(is_numeric(1337)); // true
var_dump(is_numeric("1e4")); // true
var_dump(is_numeric([])); // false
var_dump(is_numeric(9.1)); // true
var_dump(is_numeric("abc")); // false

 

isset()

Sprawdza czy zmienna została przesłana i nie jest NULL

$zmienna = '';

if (isset($zmienna)) {
echo "Zmienna została zdefiniowana";
}

// Różnica między isset a empty
$x = 0;
var_dump(isset($x)); // true
var_dump(empty($x)); // true

settype()

Konwertuje typ zmiennej (modyfikuje oryginalną zmienną).

$zmienna1 = "5bar";
$zmienna2 = true;

settype($zmienna1, "integer"); // $zmienna1 = 5
settype($zmienna2, "string"); // $zmienna2 = "1"

echo $zmienna1; // 5
echo $zmienna2; // 1

//Preferowane rzutowanie:
$zmienna1 = "5bar";
$zmienna2 = true;

$zmienna1 = (int)$zmienna1; // 5
$zmienna2 = (string)$zmienna2; // "1"

unset()

usuwa zmienną

$zmienna=5;
echo is_null($zmienna) ? 'jest NULL' : 'nie jest NULL';
unset($zmienna);
echo isset($zmienna) ? 'istnieje' : 'nie istnieje';

Funkcje matematyczne

Pełną listę funkcji znajdziecie w dokumentacji PHP,  poniżej najczęściej wykorzystywane.

 

abs()

Wartość bezwzględna (moduł z liczby)

echo abs(-4.2); // 4.2 (double/float)
echo abs(5);    // 5 (integer)
echo abs(-5);   // 5 (integer)

 

round()

Zaokrągla liczbę zmiennoprzecinkową

echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06

 

ceil()

Zaokrągla ułamki w górę

echo ceil(4.3);       // 5; 
echo ceil(9.999);     // 10; 
echo ceil(-3.14);     // -3

 

floor()

Zaokrągla ułamki w dół

echo floor(4.3);       // 4; 
echo floor(9.999);     // 9; 
echo floor(-3.14);     // -4

 

hypot()

Oblicza długość przeciwprostokątnej trójkąta prostokątnego. hypot() zwraca długość przeciwprostokątnej trójkąta prostokątnego, o długościach przyprostokątnych x i y, lub odległość punktu o współrzędnych (x, y) od początku układu współrzędnych. Jest to równoważne wyrażeniu sqrt(x*x + y*y).

echo hypot(20,21); //29

 

log()

Logarytm naturalny. Jeśli opcjonalny argument podstawa został podany, log() zwraca logpodstawaargument, w przeciwnym przypadku log() zwraca logarytm naturalny z argument.  

echo log(1000000,10); //6

 

pi() lub M_PI

Funkcja pi() wyświetla wartość liczby Pi, tą samą wartość można wywołać używając stałej wbudowanej M_PI.

echo pi(); // 3.1415926535898
echo M_PI; // 3.1415926535898

 

pow()

potęgowanie.

number pow ( number $podstawa , number $wykładnik )
echo 2**3;     //8
echo pow(2,3); //8

 

sqrt()

Pierwiastek kwadratowy.

echo sqrt(9); // 3 
echo sqrt(10); // 3.16227766 ...

 

max() i min()

max() znajduje największą liczbę, a min() najmniejszą.

PHP będzie uznawał nieliczbowe wartości typu string jako 0, jednakże zwracany będzie ciąg znakowy, jeśli zostanie on uznany numerycznie za największą/najmniejszą wartość. Jeśli wiele argumentów zostanie uznanych za wartość 0, to max()/min() zwróci wartość największą/najmniejszą alfanumerycznie, jeśli zostały podane jakiekolwiek ciągi znakowe. W przeciwnym przypadku zwrócona zostanie wartość 0.  

echo max(1, 3, 5, 6, 7);  // 7
echo max(array(2, 4, 5)); // 5
echo max(0, 'hello');     // 0
echo max('hello', 0);     // hello
echo max(-1, 'hello');    // hello

// W przypadku podania wielu tablic, max porównuje je od lewej do prawej, a więc w poniższym przykładzie 2 == 2, ale 4 < 5
print_r($val = max(array(2, 4, 8), array(2, 5, 7))); // wyświetli tablicę array(2, 5, 7)
// Jeśli podane zostaną tablice i nie-tablice, zawsze zwracana jest tablica, jako że zawsze jest uznawana za element największy
print_r($val = max('string', array(2, 5, 7), 42)); // wyświetli tablicę array(2, 5, 7)



echo min(1, 3, 5, 6, 7); // 1 
echo min(array(2, 4, 5)); // 2 
echo min(0, 'hello'); // 0 
echo min('hello', 0); // hello 
echo min(-1, 'hello'); // -1 

// W przypadku podania wielu tablic, max porównuje je od lewej do prawej, a więc w poniższym przykładzie 2 == 2, ale 4 < 5 
print_r($val = min(array(2, 4, 8), array(2, 5, 7))); // wyświetli tablicę array(2, 4, 8) 
// Jeśli podane zostaną tablice i nie-tablice, zawsze zwracana jest tablica, jako że zawsze jest uznawana za element największy 
print_r($val = min('string', array(2, 5, 7), 42)); // wyświetli string

 

deg2rad()

Przelicza stopnie na radiany.

echo deg2rad(45); //0.785398163397

 

rad2deg()

Przelicza radiany na stopnie.

echo rad2deg(0.785398163397); //44.999999999974

 

Funkcje trygonometryczne

sin()

Oblicza sinus kąta. Kąt musi zostać podany w radianach.

echo sin(deg2rad(60)); //  0.866025403 ...
echo sin(60);          // -0.304810621 ...

 

cos()

Oblicza cosinus kąta. Kąt musi zostać podany w radianach.

$stopnie=360;
echo cos(deg2rad($stopnie)); //1

 

tan()

Oblicza tangens kąta. Kąt musi zostać podany w radianach.

$stopnie=60;
echo tan(deg2rad($stopnie)); //1.7320508075689

 

Funkcje związane z losowaniem

rand() i mt_rand()

rand() generuje losową liczbę stałoprzecinkową, mt_rand() generuje lepsza liczbę losową, funkcja ta jest szybsza od rand().

echo rand();      //7771
echo rand();      //22264
echo rand(5, 15); //11

echo mt_rand();      //1604716014
echo mt_rand();      //1478643278
echo mt_rand(5, 15); //6

PHP 7.0+ – random_int() (kryptograficznie bezpieczne):

echo random_int(1, 100); // losowa liczba 1-100 (bezpieczna)

getrandmax() i mt_getrandmax()

Pokazuje największą możliwą do wylosowania przez funkcję rand() lub mt_rand() liczbę. mt_getrandmax() jest szybsza.

echo getrandmax(); //2147483647

echo mt_getrandmax(); //2147483647

 

Konwersja liczb

base_convert()

Konwertuje liczbę pomiędzy różnymi systemami liczbowymi. Może tracić precyzję przy dużych liczbach!

$hexadecimal = 'a37334';
echo base_convert($hexadecimal, 16, 2); //wyświetli 101000110111001100110100

bindec()

Konwertuje liczbę dwójkową na dziesiętną. Podana liczba musi być stringiem, czyli w ”

echo bindec('110011');    //wyświetli 51
echo bindec('000110011'); //wyświetli 51
echo bindec('111');       //wyświetli 7

decbin()

Konwertuje liczbę dziesiętną do dwójkowej.

echo decbin(12);    //wyświetli 1100
echo decbin(26);    //wyświetli 11010

dechex()

Konwertuje liczbę dziesiętną do szesnastkowej.

echo dechex(10);    //wyświetli a
echo dechex(47);    //wyświetli 2f

hexdec()

Konwertuje liczbę szesnastkową do dziesiętnej.

echo hexdec("to"); //wyświetli 0 
echo hexdec("a0"); //wyświetli 160

decoct()

Konwertuje liczbę dziesiętną do ósemkowej.

echo decoct(15);     //wyświetli 17
echo decoct(264);    //wyświetli 410

octdec()

Konwertuje liczbę ósemkowej do dziesiętnej.

echo octdec(17);     //wyświetli 15
echo octdec(410);    //wyświetli 264

 

Funkcja mail

mail()

Funkcja mail() wymaga poprawnej konfiguracji serwera SMTP!

$do = 'osoba@example.com';
$temat = 'Temat wiadomości';
$tresc = 'Treść wiadomości';
$naglowki = 'From: nadawca@example.com' . "\r\n" .
'Reply-To: nadawca@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

if (mail($do, $temat, $tresc, $naglowki)) {
echo 'Wiadomość wysłana';
} else {
echo 'Błąd wysyłania';
}

Dokładny opis funkcji mail() dostępny na stronie dokumentacji PHP

Nowoczesne podejście – użyj biblioteki PHPMailer lub Symfony Mailer:

// Przykład z PHPMailer (zainstaluj przez Composer)
use PHPMailer\PHPMailer\PHPMailer;

$mail = new PHPMailer(true);
$mail->setFrom('nadawca@example.com', 'Nadawca');
$mail->addAddress('odbiorca@example.com');
$mail->Subject = 'Temat';
$mail->Body = 'Treść wiadomości';
$mail->send();

Podsumowanie

Kluczowe pojęcia:

  • Funkcja – nazwany, wielokrotnie używalny fragment kodu
  • Parametr – zmienna w definicji funkcji
  • Argument – wartość przekazana do funkcji
  • Return – zwracanie wartości z funkcji
  • Zasięg – gdzie zmienna jest dostępna (lokalny, globalny)
  • Rekurencja – funkcja wywołująca samą siebie

Pamiętaj:

  • Używaj typów dla parametrów i wartości zwracanych
  • Jedna funkcja = jedno zadanie
  • Unikaj zmiennych globalnych
  • Zwracaj wartości zamiast echo (gdy to możliwe)
  • Waliduj argumenty wejściowe
  • Używaj znaczących nazw funkcji
  • Preferuj pure functions (bez efektów ubocznych)
  • Dokumentuj złożone funkcje (PHPDoc)

Zadania:

  1. Napisz funkcję, która przyjmuje 3 argumenty: 2 z nich to liczby, a trzecia to znak operatora arytmetycznego. Funkcja ma wykonać działanie na liczbach w zależności od wprowadzonego znaku np. 1,2,+ wykona dodawanie, 5,6,** wykona potęgowanie itd. Tam gdzie to możliwe wykorzystaj funkcje wbudowane.
  2. Napisz funkcję, która dla 3 losowo wygenerowanych liczb sprawdzi, czy są one pitagorejskie (czyli spełniają warunek: a2+b2=c2). Jeżeli tak to ma wyświetlić „Wylosowane liczby są liczbami pitagorejskimi”, w przeciwnym wypadku odwrotny komunikat.
  3. Napisz funkcję, która wyświetli na ekranie wszystkie trójki pitagorejskie z zakresu podanego przez użytkownika. (np. dla zakresu od 1-10 sprawdzamy trójki: 1 2 3; 2 3 4; 3 4 5; 4 5 6 itd)
  4. Napisz funkcję obliczającą cenę brutto dla podanej ceny netto i stawki vat. Wyświetl: cena netto, wartość vat, cena brutto.
  5. Napisz funkcję showName wyświetlającą imię przekazane do niej jako argument.
  6. Napisz funkcję o nazwie checkNumber, która zwraca prawdę (true), jeżeli przekazany argument jest mniejszy od zera.
  7. Przygotuj funkcję, która jako argument przyjmuje liczbę i zwraca prawdę, jeśli liczba jest podzielna przez 5 i 7.
  8. Przygotuj program, który podaną przez użytkownika kwotę pieniędzy (liczba całkowita) rozmieni na jak najmniejszą ilość monet i banknotów o nominałach 1, 2, 5, 10 złotych
  9. Napisz funkcję rekurencyjną i zwykłą obliczający silnię dowolnej liczby.
  10. Napisz skrypt z użyciem pętli for wyświetlający:
    *
    **
    ***
    ****
    *****
  11. Napisz skrypt z użyciem pętli for wyświetlający:
    *
    **
    ***
    ****
    *****
    ****
    ***
    **
    *

  12. Napisz funkcję obliczającą pole trójkąta równobocznego.
  13. Napisz funkcję iloczyn zwracającą iloczyn dwóch liczb przekazanych jako argumenty.
  14. Napisz funkcję o nazwie czyUjemna, która zwraca prawdę (true), jeżeli przekazany argument jest mniejszy od zera.
  15. Napisz funkcję, która jako argument przyjmuje liczbę i zwraca prawdę, jeśli liczba jest podzielna przez 3 i 5.
  16. Napisz funkcję BMI, obliczającą indeks masy ciała z dwóch wartości: masy i wzrostu przekazanych jako
    argumenty. Do obliczeń użyj następującego wzoru: BMI=masa(kg)/(wzrost(m)*wzrost(m)). Funkcja ma
    wyświetlać trzy komunikaty zależne od indeksu BMI:
    • BMI < 18,5: „Masz niedowagę”
    • 18,5 < BMI < 24,99: „Twoja waga jest prawidłowa”
    • BMI > 25,00: „Masz nadwagę!!!”
  17. Napisz funkcję zwracającą średnią arytmetyczną liczb przekazanych jako tablica do funkcji.
  18. Napisz funkcję pobierającą dwa argumenty: kolor w formie heksadecymalnej oraz napis. Funkcja ma
    umieszczać na stronie napis w kolorze przekazanym jako argument.
  19. Napisać funkcję o nazwie DzielenieTekstow (o 1 parametrze: $wyrazenie_zlozone), która jako parametr przyjmuje zmienną $wyrazenie_zlozone; w parametrze powinien być wczytany do funkcji ciąg znaków (tekst) postaci:
    pojedyncze wyrażenia oddzielone przecinkami:
    (np. „Komputer,Serwer,Router,Klawiatura,Mysz,Karta sieciowa,Monitor,Zasilacz”).
    Funkcja ma za zadanie wypisać każde pojedyncze wyrażenie znajdujące się w zmiennej $wyrazenie_zlozone w osobnej linii.
    Dodatkowo, przy wypisywaniu muszą być spełnione następujące założenia:
    1. Pierwsze i ostatnie pojedyncze wyrażenie mają być wypisane dużymi literami.
    2. Wszystkie pojedyncze wyrażenia (poza pierwszym i ostatnim), zawierające więcej niż 7 znaków należy wypisać małymi literami oraz jako pogrubione.
    Ostatecznie funkcja zwraca ilość pojedynczych wyrażeń, które wystąpiły w zmiennej $wyrazenie_zlozone.