<?> PHP NOVA invictum.hr
Izdanje 2026.
Poglavlje 16

Strogo tipiziranje

Uključujemo stroži ugovor funkcija i učimo kako union, intersection i nullable tipovi čine pogreške vidljivima ranije.

21 min čitanja Srednje razina PHP 8.5 ciljna verzija

Nakon ovog poglavlja

Što ćete znati napraviti

  • Objasniti doseg declare(strict_types=1).
  • Koristiti tipove parametara, povrata i svojstava.
  • Odabrati jednostavan tip umjesto nepotrebno širokog ugovora.

Ugovor pozivatelja

Strogi skalarni pozivi

Direktiva declare(strict_types=1) stavlja se na vrh PHP datoteke. Za pozive skalarno tipiziranih funkcija iz te datoteke PHP više neće tiho pretvarati primjerice string "12" u int. Umjesto skrivene pretvorbe dobivamo TypeError.

Direktiva vrijedi po datoteci pozivatelja, ne globalno za cijeli projekt. Zbog dosljednosti uključujemo je u svaku vlastitu PHP datoteku.

Strogi poziv
<?php

declare(strict_types=1);

function add(int $left, int $right): int
{
    return $left + $right;
}

echo add(2, 3);
// add('2', 3) baca TypeError

Precizan ugovor

Union, intersection i nullable

Union tip A|B prihvaća jednu od navedenih vrsta. Intersection A&B traži objekt koji zadovoljava sve ugovore. Nullable ?string kratica je za string|null. mixed prihvaća sve i treba ga koristiti samo na stvarnoj granici nepoznatih podataka.

Složeni tipovi
<?php

function normalizeId(int|string $id): string
{
    return trim((string) $id);
}

function displayName(?string $name): string
{
    return $name ?? 'Gost';
}

Provjera pa povjerenje

Vanjski ulaz još nema naš tip

Vrijednosti iz $_GET, $_POST, JSON-a i baze ulaze kao podaci koje moramo provjeriti. Nakon validacije pretvaramo ih u int, bool, enum ili objekt. Tada unutarnji kod može imati uske tipove i manje obrambenih provjera.

Granica HTTP ulaza
<?php

$rawPage = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
$page = is_int($rawPage) && $rawPage > 0 ? $rawPage : 1;

function offsetForPage(int $page, int $size): int
{
    return ($page - 1) * $size;
}

Primijenite naučeno

Vježba: Tipizirani kalkulator

Preuredite raniji izračun košarice u strogo tipizirane funkcije.

  1. Uključite strict_types.
  2. Dodajte tipove svim parametrima i povratnim vrijednostima.
  3. Odvojeno validirajte da količine i cijene nisu negativne.

Za provjeru i nastavak

Službeni izvori