Ho letto le risposte e non ho visto nessuno menzionare il più grande avvertimento nella conversione numerica di PHP.
La risposta più votata suggerisce di fare quanto segue:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
È geniale. PHP dirige il casting. E se avessimo fatto quanto segue?
$str = "3.14is_trash"
$intstr = (int)$str
PHP considera tali conversioni valide?
A quanto pare sì .
PHP legge la stringa fino a quando non trova il primo carattere non numerico per il tipo richiesto. Ciò significa che per i numeri interi, i caratteri numerici sono [0-9]. Di conseguenza, legge 3
, poiché si trova nell'intervallo di caratteri [0-9], continua a leggere. Legge .
e si ferma lì poiché non è compreso nell'intervallo [0-9].
Lo stesso accadrebbe se si lanciasse per float o double. PHP leggerebbe 3
, quindi .
, quindi 1
, quindi 4
, e si fermerebbe a i
poiché non è un carattere numerico float valido.
Di conseguenza, "million" >= 1000000
restituisce false, ma "1000000million" >= 1000000
valuta true
.
Guarda anche:
https://www.php.net/manual/en/language.operators.comparison.php come vengono eseguite le conversioni durante il confronto
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion come le stringhe vengono convertite in rispettivi numeri