Jest tak dlatego, że łańcuchy, które są poprawnymi wartościami zmiennoprzecinkowymi, są interpretowane jako takie.
Przykładowo 00e0
odpowiada 0 x 100
i 00e9
odpowiada 0 x 109
, z których oba są równe zero, a więc równej siebie.
Jednak od 00ea
jest nie prawidłowy numer zmiennoprzecinkowy, jest traktowany inaczej.
Można zobaczyć podobny efekt:
echo "01e2" - "01e1";
który wyprowadza 90
bo jest taka sama jak 1 x 102 - 1 x 101
lub 100 - 10
.
ta jest obsługiwana przez PHP doco (podkreślenie moje):
Jeśli porównać liczbę sznurkiem lub porównanie dotyczy ciągów liczbowych, następnie każdy łańcuch jest konwertowana na liczbę i porównanie przeprowadzone liczebnie.
że linki ustępie do another page który wyjaśnia zasady tył konwersji, powinno się zdarzyć:
Jeśli łańcuch nie zawiera żadnych znaków, «e» lub «E» „” a wartość liczbowa pasuje do limitów typu całkowitego (jak zdefiniowano w PHP_INT_MAX), łańcuch zostanie oceniony jako liczba całkowita. We wszystkich innych przypadkach zostanie on oceniony jako float.
Jeśli chcesz unikać Takie zachowanie nie jest uwaga w tym pierwszym linku, który stanowi, należy użyć ===
zamiast:
konwersji typu nie odbędzie się, gdy porównanie jest = == lub! ==, ponieważ wiąże się to z porównaniem typu i wartości.
Twoja terminologia jest wyłączona. Tu nie ma "zwrotów". Mówisz o _evaluation_. –