Asserzioni tradizionali (PHP 5 e 7)
Se il parametro assertion
è una stringa, verrà
valutata come codice PHP da assert().
I vantaggi di usare le stringhe con assertion
sono
meno overhead nella verifica e la visualizzazione dei messaggi
che contengono assertion
quando
questa fallisce. Ciò significa che se si passa una condizione booleana
come assertion
, questa condizione non sarà mostrata come
parametro della funzione di asserzione che può essere definita con la
funzione assert_options(), la condizione è convertita
in una stringa prima di chiamare la funzione handler, e il valore booleano false
viene convertito in una stringa vuota.
Le asserzioni dovrebbero essere utilizzate solo per il debug. Si possono
usare per controlli di coerenza che testano per condizioni che dovrebbero
essere sempre true
e che, in caso contrario, indichino errori di programmazione,
oppure per verificare la presenza o meno di certe caratteristiche, tipo le estensioni,
oppure certi limiti di sistema o caratteristiche.
Le asserzioni non dovrebbero essere utilizzate per le normali operazioni di
runtime quali il controllo dei parametri di input. Come regola si deve avere
che il programma debba funzionare correttamente anche disabilitando le regole di
asserzione.
Il comportamento di assert() può essere impostato
tramite assert_options() oppure tramite .ini-settings come descritto
nelle pagine del manuale relative a quelle funzioni.
La funzione assert_options() e/o il parametro
ASSERT_CALLBACK
permettono/e
di attivare una funzione di callback per gestire una asserzione fallita.
Le callback di assert() sono particolarmente utili
per costruire suite di test poiché permettono di catturare facilmente
il codice passato all'assert, oltre alle informazioni
su dove l'assert è scattato. Sebbene quest'ultime informazioni siano
rilevabili anche con altri metodi, l'uso delle asserzione rende il tutto
molto più veloce e semplice!
Le funzioni di callback devono accettare tre parametri. Il primo
conterrà il nome del file in cui si trova l'asserzione fallita. Il
secondo parametro conterrà il numero di linea dell'asserzione fallita, ed
il terzo parametro conterrà l'espressione dell'asserzione fallita (se
qualsiasi — valore letterale come 1 o "due" non verrà passato con
questo parametro). Gli utenti di PHP 5.4.8 e successivi possono anche fornire un quarto
parametro opzionale, che conterrà la
description
data all'assert(), se
è stata impostata.
Aspettative (solo PHP 7)
assert() è un costrutto del linguaggio in PHP 7, consentendo
la definizione delle aspettative: asserzioni che hanno effetto in ambienti di
sviluppo e di test, ma sono ottimizzate per avere un costo zero in
produzione.
Mentre assert_options() può ancora essere utilizzata per controllare
il comportamento come sopra descritto per ragioni di retrocompatibilità, il codice
solo per PHP 7 dovrebbe usare le due nuove direttive di configurazione per controllare
il comportamento di assert() e non chiamare
assert_options().
Direttive di configurazione di PHP 7 per assert()
Direttiva |
Valore predefinito |
Valori possibili |
zend.assertions
|
1 |
-
1 : genera ed esegue il codice (modalità di sviluppo)
-
0 : genera il codice ma lo salta in fase di runtime
-
-1 : non genera il codice (modalità di produzione)
|
assert.exception
|
0 |
-
1 : segnala quando l'asserzione fallisce, o
sollevando l'oggetto fornito come exception
o sollevando un nuovo oggetto AssertionError se
exception non è stato fornito
-
0 : utilizza o genera un
Throwable come descritto sopra, ma genera
solo un warning basato su quell'oggetto al posto di sollevarlo
(compatibile con il comportamento di PHP 5)
|