2016-09-26 17 views
17

zauważyłem, że kod poniżej rezultatów w różnorodnych wiadomości w PHP 5.x i 7:PHP 5 do 7 migracja - Numery porównanie

if ('0xFF' == 255) { 
    echo 'Equal'; 
} else { 
    echo 'Not equal'; 
} 
  • 5.x: Równe
  • 7: Nie równy

Próbowałem znaleźć opis zmian, które powodują to w przewodniku migracji iw dokumencie PHP, ale nie można znaleźć niczego. Prawdopodobnie jest gdzieś tam i po prostu tęskniłem. Czy możesz to wskazać? Dziękuję Ci!

Gdzie spojrzałem

+0

[właśnie dlatego ja zawsze nienawidziłem języków z niejawne konwersje typów między smyczkowy/numerycznym/logiczna etc. i porównań typu konwertazy] (http: //i.stack.imgur. com/35MpY.png) - [zgadnijcie co, każdy język tych ma swoje własne zasady, ponieważ wszyscy inni są głupi, duh] (http://php.net/manual/en/types.comparisons.php) – vaxquis

Odpowiedz

24

To tutaj: http://php.net/manual/en/migration70.incompatible.php

Zmiany String Handling

szesnastkowe struny nie są już uważane numeryczny

ciągów znaków zawierających cyfry szesnastkowe nie są już uważane za numeryczny. Na przykład: <?php var_dump("0x123" == "291"); itp ...

+4

jeśli koniecznie musisz wykonać takie porównanie, możesz zawrzeć wartość heksadecymalną w [hexdec] (http://php.net/manual/en/function.hexdec.php), aby uzyskać dziesiętny wynik. – rockerest

+0

Ach, ta strona była pierwszą, na którą patrzyłem, nie mogę uwierzyć, że to przegapiłem! Dziękuję Ci! – Pavel

+1

Zobacz także motywujące RFC, [Usuń obsługę szesnastkową w łańcuchach numerycznych] (https://wiki.php.net/rfc/remove_hex_support_in_numeric_strings). – bishop