Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Warunek
Forum PHP.pl > Forum > Przedszkole
mimol
Napisałem taki sobie oto warunek
  1. $amount = 0;
  2.  
  3. if ($amount=='+'){
  4. echo '+';
  5. }elseif ($amount =='-'){
  6. echo '-';
  7. }else{
  8. echo $amount;
  9. }

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
nospor
nie ==
a ===
mimol
@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?
Michasko
Prawdopodobnie dlatego, że przy == Twój plus zostanie zrzutowany do INTa, co da 0.
Poprawcie mnie, jeśli się mylę.
mstraczkowski
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 (===))

  1. ($sHash == $sDifferentHash)

Do poczytania na temat hashy:
http://phpsadness.com/sad/47

Kilka przykładów z zerem:
  1. var_dump(0 == 'witam'); // true
  2. var_dump(1 == 'witam'); // false
  3.  
  4. var_dump((string)0 == 'witam'); // false
  5. var_dump(0 === 'witam'); // false
mimol
Nie rozumiem dlaczego
  1. var_dump("61529519452809720693702583126814" == "61529519452809720000000000000000");'
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ę
  1. var_dump(61529519452809720693702583126814 === 61529519452809720000000000000000);

Czy PHP nie radzi sobie z dużymi liczbami?
Szymciosek
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
_Borys_
2147483647 - (int)
2147483648 - (float)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.