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.
<?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.
<?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.
<?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.
- Uključite strict_types.
- Dodajte tipove svim parametrima i povratnim vrijednostima.
- Odvojeno validirajte da količine i cijene nisu negativne.
Za provjeru i nastavak