declare(strict_types=1) în PHP

Activează verificarea strictă a tipurilor: o funcție care cere int nu mai acceptă textul "5".

Sintaxă
declare(strict_types=1);

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 TypeError la datele din formulare. Valorile din $_POST și $_GET sunt mereu texte: convertește-le explicit cu (int) sau intval după 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.