Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwne zachowanie if()
Forum PHP.pl > Forum > PHP
LBO
  1. <?php
  2. $arr = array(0, '0', 1, '1', true, false, '', 'alpha', 'alphanumeric123');
  3. $zero = 0;
  4. print('$zero jest typu ');
  5. var_dump($zero);
  6. print(PHP_EOL);
  7. foreach ($arr as $value) {
  8. var_dump($value);
  9. if ($value == $zero) {
  10. print($value.' == 0 true'.PHP_EOL.PHP_EOL);
  11. } else {
  12. print($value.' == 0 false'.PHP_EOL.PHP_EOL);
  13. };
  14. };
  15. ?>

Wbrew moim oczekiwaniom skrypt wyswietlił:
Cytat
$zero jest typu int(0)

int(0)
0 == 0 true

string(1) "0"
0 == 0 true

int(1)
1 == 0 false

string(1) "1"
1 == 0 false

bool(true)
1 == 0 false

bool(false)
== 0 true

string(0) ""
== 0 true

string(5) "alpha"
alpha == 0 true // false?

string(15) "alphanumeric123"
alphanumeric123 == 0 true // false?


Czy mi się wydaje, ale chyba coś nie tak z ostatnimi dwoma wynikami porównania?

Pracuję na php 5.1.2, Win XP Sp2

P.S. Gdy porównuję typami (===) zjawisko znika.
nospor
no nie do konca jest źle.
gdy porownujesz liczbe ze stringiem, to string zamieniany jest na liczbe. A jak wiadomo 'alpha' przy zmianie na liczbe to 0.
Gdyby Twoje $zero bylo rowne '0' jako tekst, to by bylo ok
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.