![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 5 Dołączył: 10.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Napisałem taki sobie oto warunek
Z niewiadomych dla mnie przyczyn zamiast wyświetlić 0 wyświetla + (przecież 0 =/= +) Jeśli dam === zamiast ==, działa OK Czy może mi ktoś wyjaśnić dlaczego tak to działa? przecież 0/Null z pewnością nie powinien pasować do 1szego warunku |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
nie ==
a === |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 5 Dołączył: 10.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
@nospor, tak też na to wpadłem,
Jednak mojepytanie brzmi Czy może mi ktoś wyjaśnić dlaczego tak to działa? przecież 0/Null z pewnością nie powinien pasować do 1szego warunku Wiem, że === porównuje również Typ (wydaje mi, że === porównujetyp 0 ===NULL zwróci false) == porównuje wartość, dlacego '+' dla PHP równa się 0? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 283 Pomógł: 31 Dołączył: 10.01.2006 Skąd: Działoszyn Ostrzeżenie: (0%) ![]() ![]() |
Prawdopodobnie dlatego, że przy == Twój plus zostanie zrzutowany do INTa, co da 0.
Poprawcie mnie, jeśli się mylę. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 273 Pomógł: 52 Dołączył: 3.02.2013 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
Natrafiłeś na bardzo ciekawą rzecz w PHP, która jest ciężka do zlokalizowania w przypadku np. testów i nie jest logiczna.
Dla PHP jakikolwiek string porównany (==) do zera (integer) zwróci nam true Wyjaśnienie znajdziesz tutaj: http://www.php.net/manual/en/language.type...ring.conversion W skrócie, dzieję się to dlatego, że PHP sobie rzutuje wtedy stringa na (int) co da mu w wyniku zero. Ciekawa sytuacja też zachodzi niekiedy przy porównywaniu hashy md5 Czasami hash przypomina wyglądem floata i jest rzutowany przez PHP co może prowadzić do spełnienia takiego warunku: (Katastrofalne w skutkach, ale niestety prawdziwe, należy używać operatora identyczności (===))
Do poczytania na temat hashy: http://phpsadness.com/sad/47 Kilka przykładów z zerem: Ten post edytował mstraczkowski 13.02.2013, 13:15:43 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 5 Dołączył: 10.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem dlaczego
zwraca prawdę (nawet jeśli jest rzutowane na float , to to są różne wartośći. Jak również dlaczego poniższy przykład zwraca prawdę Czy PHP nie radzi sobie z dużymi liczbami? Ten post edytował mimol 16.02.2013, 19:31:15 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Znalazłem:
32-bit builds of PHP: Integers can be from -2147483648 to 2147483647 64-bit builds of PHP: Integers can be from -9223372036854775808 to 9223372036854775807 Oraz np echo PHP_INT_MAX |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 587 Pomógł: 190 Dołączył: 5.02.2011 Skąd: 64-800 Ostrzeżenie: (0%) ![]() ![]() |
2147483647 - (int)
2147483648 - (float) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 19:29 |