Wpis z mikrobloga

@massejferguson: W tym przykładzie chodzi o to, że -1 jest traktowane jak true;

== oznacza porównanie pod względem zawartości, nie zaś typu danych.

W PHP wszystkie liczby różne od zera przy porównywaniu pod względem zawartości (liczb z wartością logiczną) są traktowane jako true, więc jeśli pod $x będzie jakakolwiek liczba inna niż 0, to zawsze warunek będzie spełniony.

Jako false traktowane jest 0, pusty ciąg znaków, pusta tablica,
@Serghio @massejferguson należy podkreślić, że w przypadku porównań, które są krytyczne dla bezpieczeństwa zawsze należy stosować === w przeciwnym wypadku, może dojść do sytuacji jak wyżej, ale np. przy porównywaniu hashy haseł do logowania. Są nawet całe kolekcje 'magic hashy', które mogą służyć do przechodzenia takich porównań.
@massejferguson: Ktoś kto układał to pytanie uznał, że programista w tym języku powinien posiadać wiedzę, że kompilator przy debugowaniu zmiennych zwraca zawsze słowo bool, mimo, że dopuszcza się używanie w kodzie słowa boolean. Nie wiem z czego to wynika, być może to jakaś zaszłość z pierwszych wersji PHP. Nie jest to niezbędna wiedza. Dużo bardziej ważne jest to jak zachowuje się == lub === w kontekście różnych typów i
@massejferguson: zaszłość historyczna. Biblioteka stdbool.h pojawiła się w wersji C99. PHP jest kompilowane w C i ma dużo z niego zaczerpnięte, więc używa została forma taka sama jak w C99.

Nowe języki typu Java używają boolean gdzie wskazują że działają na wartościach binarnych czyli 00000001 i 00000000 które odpowiadają odpowiednio wartościom Boole'a true i false. Czyli tylko reprezentują stan true lub false. Boolean "nie oferuje" konwertowania wartości i porównywania ich jako