J'ai lu les réponses et je n'ai vu personne mentionner la plus grande mise en garde dans la conversion des nombres PHP.
La réponse la plus votée suggère de faire ce qui suit:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
C'est brillant. PHP fait du casting direct. Et si nous faisions ce qui suit?
$str = "3.14is_trash"
$intstr = (int)$str
PHP considère-t-il que ces conversions sont valides?
Apparemment oui .
PHP lit la chaîne jusqu'à ce qu'il trouve le premier caractère non numérique du type requis. Cela signifie que pour les entiers, les caractères numériques sont [0-9]. En conséquence, il lit 3
, puisqu'il est dans la plage de caractères [0-9], il continue la lecture. Lit .
et s'arrête là car il n'est pas dans la plage [0-9].
La même chose se produirait si vous deviez lancer pour flotter ou doubler. PHP lirait 3
, puis .
, puis 1
, puis 4
s'arrêterait i
car ce n'est pas un caractère numérique flottant valide.
Par conséquent, "million" >= 1000000
évalue à faux, mais "1000000million" >= 1000000
évalue à true
.
Voir également:
https://www.php.net/manual/en/language.operators.comparison.php comment les conversions sont effectuées lors de la comparaison
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion comment les chaînes sont converties en nombres respectifs