Мне просто интересно, почему мое утверждение if не было введено при использовании научной нотации, т.е. 1e2
вместо 100
а также 1e6
вместо 1000000
,
Оказывается, они равны и не идентичны, как видно из следующего кода:
<?php
echo "Integer: " . 100; // prints 100
echo "\n";
echo "Scientific notation: " . 1e2; // prints 100
echo "\n";
echo "Equality: ";
if(100 == 1e2) {
echo "as expected";
} else {
echo "wtf php";
}
// prints "Equality: as expected"
echo "\n";
echo "Identity: ";
if(100 === 1e2) {
echo "as expected";
} else {
echo "wtf php";
}
// prints "Identity: wtf php"
я имею запустить его на разных версиях PHP и это, по крайней мере, непротиворечиво, поскольку это поведение одинаково для: 4.3.0 — 5.0.5, 5.1.1 — 5.6.27, hhvm-3.10.0 — 3.13.2, 7.0.0 — 7.1.0RC5 ,
Еще: почему !?
===
оператор, в php, рассмотрим тип операндов.
1e2
даже вернуть float
номер и 100
является целым числом
итак, это равно в значениях (==
), но не в типах (===
).
Других решений пока нет …