[PHP]Warunek, Zmienna jest równa 0 |
[PHP]Warunek, Zmienna jest równa 0 |
13.02.2013, 12:03:22
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 |
|
|
13.02.2013, 12:05:21
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
nie ==
a === -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.02.2013, 12:10:16
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? |
|
|
13.02.2013, 12:15:22
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ę. -------------------- Po prawie 3-letniej przerwie w programowaniu, znowu raczkuję :) |
|
|
13.02.2013, 13:00:43
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 -------------------- Jeżeli moja wypowiedź Ci pomogła użyj przycisku
|
|
|
16.02.2013, 19:20:28
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 |
|
|
16.02.2013, 19:40:20
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 |
|
|
16.02.2013, 20:04:18
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) |
|
|
Wersja Lo-Fi | Aktualny czas: 23.04.2024 - 17:19 |