Ce face declare(strict_types=1)
Implicit, PHP încearcă să convertească valorile la tipul cerut de parametru: textul "5" devine 5 pentru un parametru int. Cu declare(strict_types=1); conversia nu se mai face și primești TypeError. Singura excepție permisă: un int este acceptat acolo unde se cere float.
Declarația trebuie să fie prima instrucțiune din fișier și are efect doar asupra apelurilor făcute din acel fișier. Multe proiecte moderne o pun în fiecare fișier, pentru că prinde din timp greșelile de tip.
Exemple
Exemplul 1: Fără strict_types: conversie automată
<?php
function dublu(int $x): int
{
return $x * 2;
}
var_dump(dublu("5"));
var_dump(dublu(7.0));
Rezultat
int(10)
int(14)
Exemplul 2: Cu strict_types: TypeError
<?php
declare(strict_types=1);
function dublu(int $x): int
{
return $x * 2;
}
function jumatate(float $x): float
{
return $x / 2;
}
var_dump(jumatate(5));
try {
var_dump(dublu("5"));
} catch (TypeError $e) {
// Mesajul complet mai conține și fișierul și linia apelului.
echo strstr($e->getMessage(), ", called in", true);
}
Rezultat
float(2.5)
dublu(): Argument #1 ($x) must be of type int, string given
Greșeli frecvente
- Pui
declare(strict_types=1);după alt cod. Primești eroarea fatalăstrict_types declaration must be the very first statement in the script. - Activezi modul strict și primești
TypeErrorla datele din formulare. Valorile din$_POSTși$_GETsunt mereu texte: convertește-le explicit cu(int)sauintvaldupă validare.
Comenzi înrudite
function: Definește o funcție proprie: un bloc de cod cu nume, pe care îl poți apela de oricâte ori.try / catch / finally / throw: Prinde erorile (excepțiile) apărute într-un bloc de cod, ca scriptul să nu se oprească brusc.