Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] if('0')
Forum PHP.pl > Forum > PHP
kufalo
Witam,

Kod
print('0'?true:false);


Czy w PHP cos takiego od zawsze zwracalo false czy moze ostatnio zaszly jakies zmiany? ... A moze to ja mam nieprawidlowe skojarzenia z jezyka JS, gdzie tylko pusty string rzutuje sie na false, a reszta na true.
kufalo
no i jasne zgadza sie, FALSE: the empty string, and the string "0"

Czyli dla '0' inaczej rzutowane niz w innych jezykach (np JS)
szmerak
0 i pusty string - to masz jak null
a null - define("null", 0)

Czyli
  1. <?php
  2. if(null == false)
  3. {
  4. echo "PRAWDA";
  5. }
  6. ?>

Takie coś ci zwróci prawde
  1. <?php
  2. if(null === false)
  3. {
  4. echo "PRAWDA";
  5. }
  6. ?>

ale takie coś już nie przez sprawdzanie typu
wNogachSpisz
PHP niestety tak ma.
Mi też to nie pasuje.
Kiedyś nawet o tym pisałem

false != '1'
false != 1
false == 0
false == '0'
false != '00'
false != '0.0'
false != '-1'
Uriziel01
Chyba nie rozumiem co w tym dziwnego że '0' == false. Rozumiem że w JS '0' rzutowane jest na kod ASCII znaku, dlatego też jest inne od 'false' ? Wydaje mi się to całkowicie normalne i naturalne podejście. Ale faktycznie widzę że może w pewnych sytuacjach przysporzyć sporo komplikacji.
Ale jeżeli naprawdę nie możesz tego znieść, zawsze możesz użyć:
  1. <?PHP
  2. $val = '0';
  3. if (false == $val AND ord($val) != 48)
  4. {
  5. echo 'prawda';
  6. }
  7. else
  8. {
  9. echo 'fałsz';
  10. }
  11. ?>


Albo wręcz opisać to w funkcje w stylu 'real_value' i voila!

  1. <?PHP
  2. $val = '0';
  3. if (false == real_value($val))
  4. {
  5. echo 'prawda';
  6. }
  7. else
  8. {
  9. echo 'fałsz';
  10. }
  11.  
  12. function real_value($val)
  13. {
  14. if (false == $val AND ord($val) != 48)
  15. {
  16. return false;
  17. }
  18. else
  19. {
  20. return true;
  21. }
  22. }
  23. ?>
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.