Modern PHP jisupportja dikjarazzjonijiet tat-tipi fuq il-parametri tal-funzjoni, il-valuri ta' ritorn, u l-proprjetajiet tal-klassiBiħ u declare(strict_types=1) biex jinforzi b'mod stretti. Flimkien, huma jġibu ħafna mis-sigurtà tal-lingwi statikament ittipati għal PHP, u jaqbdu l-bugs kmieni.
Dikjarazzjonijiet tat-tipi kullimkien
<?php
class Account {
public float $balance = 0.0; // typed PROPERTY (PHP 7.4+)
private ?string $note = null; // nullable type
public function deposit(float $amount): void { // typed param + return
$this->balance += $amount;
}
public function getBalance(): float { // typed return
return $this->balance;
}
}
Tista' tippikka tipi tal-parametri, valuri ta' ritorn, u proprjetajiet tal-klassi. It-tipi jinkludu scalars (int, float, string, bool), klassijiet/interfaces, array, ?Type (nullable), u void.
Union, intersection, u tipi speċjali (PHP 8)
function process(int|string $id): User|null { } // union type — int OR string
function handle(Countable&Iterator $x): void { } // intersection (PHP 8.1) — BOTH
function get(): static { } // return the called class's type
function nothing(): never { } // never returns (throws/exits, PHP 8.1)
PHP 8 iddaħal union types (int|string), intersection types, u tipi ta' ritorn speċjali (static, never).
strict_types: il-toggle kruċjali
<?php
declare(strict_types=1); // MUST be the first statement in the file
function add(int $a, int $b): int { return $a + $b; }
add(5, 3); // ✅ 8
add("5", 3); // ❌ TypeError — strict_types REJECTS the string (no coercion)
WITHOUT strict_types (default "coercive" mode):
add("5", 3) → "5" is silently coerced to int 5 → returns 8 (lenient, can hide bugs)
WITH strict_types=1:
add("5", 3) → TypeError immediately (must pass the exact declared type)
declare(strict_types=1) ibiddel minn coercion indulgent għal enforcament stretti — PHP ireġetta l-mismatch tat-tipi minflok ma jikkonvartihom bla ħamrija. Dan jaqbdu l-bugs li l-coercion kienet saħħa tnaqqashom.
Għalfejn hu importanti
Dikjarazzjonijiet tat-tipi u tipi stretti huma importanti għat-tikteb ta' PHP robustu u manutenibbli modern, u huma jirrappreżentaw evoluzzjoni maġġuri tal-lingwa lil hinn mill-oriġini slacksly-typed tagħha.
Dikjarazzjonijiet tat-tipi fuq il-parametri, it-ritornijiet, u l-proprjetajiet jagħmlu l-kodiċi self-documenting (is-sottoscrizioni jiddikjaraw b'mod ċar l-aspettazzjonijiet) u jħalluh lil PHP jaqbdu l-iżbalji tat-tipi awtomatikament, filwaqt li ż-żidiet moderni (union types, nullable types) jagħmlu s-sottoscrizioni preċiżi.
L-iktar prattika importanti hi declare(strict_types=1): tibiddel PHP minn coercion indulgent (fejn "5" ssiċċilement issir 5, potenzjalment naħħija l-bugs) għal enforcament stretti (rifuta tipi mismatched b'clear TypeError) — għodda ċavetta għal qbid ta' bugs kmieni u tikteb ta' kodiċi affidabbli, u l-implinit modern rakkommandat.
L-għarfien ta' dikjarazzjonijiet tat-tipi u l-użu ta' tipi stretti hu għarfien professjonali, ta' kuljum għall-iżvilupp modern ta' PHP — jġib ħafna mis-sigurtà tal-lingwi statikament ittipati għal PHP, jagħmlu l-kodiċi aktar robustu u aktar faċli għal manutenzjoni.
Minħabba li l-frameworks modern ta' PHP u l-codebases miktuba tajba jużaw ittipjar estensivament (u tipi stretti fit-tul), l-masteress ta' dan hu essenzjali għat-tikteb u x-xogħol ma' PHP kontemporanju ta' kwalità, u jiddistingwi l-kodiċi modern safe tat-tipi mill-istil loosely-typed ta' PHP antika li hu soġġett għal iżbalji.
