Una delle novità più interessanti di PHP 7.1 riguarda il nuovo sistema con il quale l'interprete del linguaggio manipola le stringhe pure all'interno delle operazioni aritmetiche; con questo aggiornamento è stato infatti superato il precedente approccio, valido fino a PHP 5.6, che consentiva di introdurre queste ultime in tali espressioni matematiche senza causare la segnalazione di eccezioni.
Ora, con PHP 7.1, vengono generati dei warning
o delle notice
a seconda della modalità con la quale vengono passate delle stringhe come operandi per gli operatori aritmetici; per proporre un esempio a riguardo è possibile testare le tre operazioni seguenti in un ambiente basato su PHP 5.6 (per la precisione la release 5.6.28):
var_dump("8" + "4");
var_dump("8" + "una stringa");
var_dump("8" + "4 e una stringa");
In fase di esecuzione vengono prodotti i seguenti risultati:
int(12)
int(8)
int(12)
Sostanzialmente, prima dell'ultima stabile di PHP l'interprete si limitava a verificare la presenza di valori numerici e li utilizzava al fine di ottenere un risultato valido dal punto di vista aritmetico, ciò al di là del tipo di dato utilizzato. La presenza di una stringa alfabetica nell'espressione non dava quindi luogo ad errori.
Ora proviamo a ripetere il medesimo test utilizzando un ambiente basato su PHP 7.1, in questo secondo caso otterremo un risultato come il seguente:
int(12)
Warning: A non-numeric value encountered in /path/math.php on line 3 int(8)
Notice: A non well formed numeric value encountered in /path/math.php on line 4 int(12)
Nessun problema per la prima operazione, vengono infatti individuati dei valori numerici e l'esecuzione produce il risultato atteso. Nella seconda e nella terza operazione viene invece rilevata la presenza di stringhe che portano alla segnalazione di eccezioni. Osservando l'ultima riga dell'output si noti come l'interprete sia comunque in grado di produrre il risultato atteso ("int(12)
"), in quanto la presenza di valori numerici viene comunque rilevata.
Con PHP 7.1 si ha quindi un warning
quando si tenta di passare all'operatore un operando non numerico, viene invece generato un notice
quando il valore numerico risulta non formattato correttamente perché, ad esempio, seguito da una stringa alfabetica.