assert în PHP

Erori și excepții PHP 4+ (AssertionError: PHP 7.0+)

Verifică o condiție care trebuie să fie mereu adevărată și aruncă AssertionError dacă nu este.

Sintaxă
assert(mixed $assertion, Throwable|string|null $description = null): bool

Ce face assert

assert este o verificare pentru programator, nu pentru datele utilizatorilor. Scrii în cod ce presupui că e adevărat (de exemplu „prețul nu e negativ”), iar în timpul dezvoltării PHP aruncă AssertionError dacă presupunerea e falsă.

Comportamentul depinde de setarea zend.assertions: 1 (dezvoltare) verifică, -1 (recomandat pe producție) nici nu compilează verificările, deci nu costă nimic. De aceea nu pune în assert cod care trebuie să ruleze.

Parametri

Parametru Descriere
$assertion Condiția verificată.
$description Opțional. Mesajul erorii sau o excepție proprie aruncată în loc de AssertionError.

Ce returnează

true dacă condiția e adevărată (sau dacă verificările sunt dezactivate).

Exemple

Exemplul 1: O presupunere falsă, în timpul dezvoltării

Exemplul a fost rulat cu zend.assertions = 1. Pe un server cu -1 nu se afișează nimic.

<?php
function aplica_reducere(float $pret, float $procent): float
{
    assert($procent >= 0 && $procent <= 100, "Procentul trebuie să fie între 0 și 100");
    return $pret * (1 - $procent / 100);
}

try {
    aplica_reducere(200, 150);
} catch (AssertionError $e) {
    echo "AssertionError: " . $e->getMessage();
}

Rezultat

AssertionError: Procentul trebuie să fie între 0 și 100

Greșeli frecvente

  • Folosești assert pentru a valida datele din formulare. Pe producție verificările sunt de obicei oprite și datele greșite trec. Validează cu if și aruncă o excepție.
  • Pui o operație necesară în condiție: assert($id = salveaza()). Cu zend.assertions = -1, salveaza() nu mai rulează deloc.

Comenzi înrudite

  • ini_set / ini_get: Schimbă o setare din php.ini doar pentru scriptul curent (ini_set) sau îi citește valoarea (ini_get).
  • var_dump: Afișează tipul și valoarea exactă a unei variabile. Este principalul instrument de depanare.