Prównynawanie wartości w PHP

Proste zadanie z PHP, pokazując jak działają operatory porównania.

Opis problemu

Jaki będzie wynik każdego z poniższych stwierdzeń i dlaczego?


var_dump(0123 == 123);
var_dump('0123' == 123);
var_dump('0123' === 123);

Rozwiązanie problemu

var_dump (0123 == 123) wyświetli bool (false), ponieważ wiodące 0 w 0123 mówi interpreterowi PHP, aby traktował wartość jako wartość ósemkową (a nie dziesiętną), a 123 ósemkowo jest równe 83 dziesiętnie, więc wartości nie są równe.

var_dump ('0123' == 123) wyświetli bool (true), ponieważ ciąg 0123 zostanie automatycznie przekztałvony na liczbę całkowitą, gdy zostanie porównany z wartością całkowitą. Co ciekawe, gdy przeprowadzana jest ta konwersja, wiodące 0 jest ignorowane, a wartość jest traktowana jako wartość dziesiętna (a nie ósemkowa), więc wartości mają wartość 123 (dziesiętną) i dlatego są równe.

var_dump ('0123' === 123) wyprowadza wartość bool (false), ponieważ wykonuje bardziej ścisłe porównanie i nie wykonuje automatycznego przymusu typu, czyli przekształcenia ciągu do liczby całkowitej.