Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]BUG w PHP!
Forum PHP.pl > Forum > Przedszkole
Black-Berry
  1. <?php
  2. $x = 0;
  3.    if ($x==1 or $x=='on') {
  4.        echo 'wartość ustawiona';
  5.    } else {
  6.        echo 'wartość nie ustawiona';
  7.    }
  8. ?>


Zgadnijcie co powinno się wyświetlić dla $x=0 questionmark.gif? 'wartość nie ustawiona' ? Nie zgadliście! Wyświetli się 'wartość ustawiona' przy $x == 0!! O co chodzi?? Przecież chyba to nie bład logiczny z mojej strony.
mike
A może warto jakieś podstawy jązyka liznąć najpierw, co?
Comparison Operators
String conversion to numbers
Black-Berry
Co ty piszesz? Przecież tu nigdzie nei ma konwersji:

Najpierw leci if ($x == 0) nie jest wiec sprawdza:
jesli $x == 'on' - nie jest
wynik powinien być ''wartosc nie ustawiona

Edit: Dobra, racja 0=='on' daje true z natury. Masakra. Powinni to gdzieś pisac na opakowaniu dużymi literami ohmy.gif
mike
Cytat(Black-Berry @ 3.02.2009, 11:03:35 ) *
jesli $x == 'on' - nie jest
A jak mądralo porównasz wartość liczbową z wartością string?
Żeby to zrobić PHP dokonuje konwersji stringa do liczby. Ech, podstawy logili i programowania.

Cytat(Black-Berry @ 3.02.2009, 11:08:35 ) *
Edit: Dobra, racja 0=='on' daje true z natury. Masakra. Powinni to gdzieś pisac na opakowaniu dużymi literami ohmy.gif
Nie z natury tylko to właśnie wynika z konwersji stringa to liczby.
Black-Berry
To wyjaśnij mi w takim razie dlaczego 'on' po konwersji na liczbę daje wartość 0; Nie chce mi się sprawdzać w tablicy ascci ale dla przykładu:

String 'on' szesnastkowo będzie miał 3 bajty: #00-#A8-#B6 jak dla mnie to nei jest zero. To jest o #A8B6 za daleko od zera żeby o nim mówić!
wookieb
Cytat(Black-Berry @ 3.02.2009, 11:17:41 ) *
To wyjaśnij mi w takim razie dlaczego 'on' po konwersji na liczbę daje wartość 0; Nie chce mi się sprawdzać w tablicy ascci ale dla przykładu:

String 'on' szesnastkowo będzie miał 3 bajty: #00-#A8-#B6 jak dla mnie to nei jest zero. To jest o #A8B6 za daleko od zera żeby o nim mówić!


Ty też z załoożycielem tematu zacznijcie czytac manuala a nie herezję głosicie...
Kod
echo (int)'text';

daj zero
http://pl.php.net/manual/pl/language.types...ring.conversion
CZYTAĆ A NIE P........
A do pobrania numeru ascii znaku to http://pl.php.net/manual/pl/function.ord.php
A tu masz do hexów http://pl.php.net/manual/pl/function.bin2hex.php

Cytat(Black-Berry @ 3.02.2009, 11:17:41 ) *
String 'on' szesnastkowo będzie miał 3 bajty: #00-#A8-#B6.


Kod
echo bin2hex('on');

Daje 6f6e i co ty na to?
revyag
Cytat
To wyjaśnij mi w takim razie dlaczego 'on' po konwersji na liczbę daje wartość 0; Nie chce mi się sprawdzać w tablicy ascci ale dla przykładu:


http://pl.php.net/manual/pl/language.types...ring.conversion

Cytat
When a string is evaluated in a numeric context, the resulting value and type are determined as follows.

The string will be evaluated as a float if it contains any of the characters '.', 'e', or 'E'. Otherwise, it will be evaluated as an integer.

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.
Smoker
Przy konwersji jakiegokolwiek tekstu który nie zawiera cyfr/liczb dostaniesz wartość równą 0 haha.gif Dopiero zaczynam z php ale to pamiętam z mojego małego książkowego kompendium wiedzy smile.gif Jeśli nie ma cyferek to php konwertuje taki tekst na 0 właśnie dlatego że nie znalazł wartości liczbowych, a skoro nie ma wartości liczbowych to to nawet 0 nie powinno być ale coś musi wstawić przy konwersacji tongue.gif Możnaby to jeszcze inaczej wytłumaczyć... 0 odpowiada wartości logicznej 'false' więc przy porównaniu wartosci liczbowej do tekstu proboje zamienic tekst na wartosc liczbowa jednak nie znajduje zadnych cyferek wiec ustawia wartosc false czyli 0 haha.gif Pozatym tego nie trzeba rozumiec to wystarczy pamietac tongue.gif LITERKI TO NIE CYFERKI haha.gif taka zasada tongue.gif ale to juz chyba w podstawowce bylo ?!?
legorek
No to wynika z konwencji. W innym przypadku co powinno według ciebie zwrócić wyrażenie:
  1. <?php
  2. var_dump((int) '2');
  3. ?>

Wartość ASCII dla znaku 2? Czy 0?
Black-Berry
No to teraz dupa... Jak ktoś mi wyśle postem liczbę zero to nie wiem czy ją taktować jako literkę czy cyferkę sadsmiley02.gif
legorek
Napisz konkretnie jaki masz problem. Skoro to $_POST, więc zawsze będzie zawierał stringi.
wookieb
Cytat(Black-Berry @ 3.02.2009, 11:30:33 ) *
No to teraz dupa... Jak ktoś mi wyśle postem liczbę zero to nie wiem czy ją taktować jako literkę czy cyferkę sadsmiley02.gif


Lepiej już sie nie wypowiadaj... http://pl.php.net/manual/pl/language.opera....comparison.php
Ale pewnie nie przeczytasz to ci napisze...
Kod
1=='01' // true
1=='1'// true
1==='01' // false
1==='1'//false
Black-Berry
Dobra, spoko. Nie chodzi o manuala. Przeczytałem juz te linki 10 razy. Poprostu myślałem że 'string' daje liczbę przy konwersji. Niedopatrzenie z mojej strony. Wątek można zamknąć.
Smoker
Da Ci liczbe ale jesli w tym stringu tez bedziesz mial liczbe i przy zalozeniu tak jak wyzej == a nie ===
Black-Berry
Ale paranoja niezła. Teraz do mnie dotarła wada nie ustawiania typów:

(true == "a")  // true
(1 == "a") // false
(1 == true) // true


Zauważcie jak się można pomylić i z czego wynikało moje zamieszanie. 'a' jest true ale tylko jeśli je porównamy z (boolean)true jeśli je porównamy z (int)1 to już nie jest.

Wniosek: Ciąg jest prawdą ale tylko w parze z prawdą bo z liczbą już jest kłamstwem pomimo tego iż zarówno prawda jak i liczba są prawdziwe czarodziej.gif Trzeba to oprawić w ramkę i dać do podstawówki żeby dzieci wkuwały na pamięć guitar.gif
mike
Cytat(Black-Berry @ 3.02.2009, 11:48:25 ) *
Zauważcie jak się można pomylić i z czego wynikało moje zamieszanie. 'a' jest true ale tylko jeśli je porównamy z (boolean)true jeśli je porównamy z (int)1 to już nie jest.

Wniosek: Ciąg jest prawdą ale tylko w parze z prawdą bo z liczbą już jest kłamstwem pomimo tego iż zarówno prawda jak i liczba są prawdziwe czarodziej.gif Trzeba to oprawić w ramkę i dać do podstawówki żeby dzieci wkuwały na pamięć guitar.gif
Proszę zamknijcie ten wątek, żeby ~Black-Berry zachował choć trochę czci tongue.gif

Przecież Ty nie masz pojącia o logice! i o porównywaniu wartości a to co piszesz to bzdury nie wnioski.
Apeluję: kliknij w dwa linki z pierwszego mojego posta i wnikliwie poczytaj.
nospor
przychylam sie postulatu mikea bo naprawde co kolejny post to glupszy....
wyjasniono ci juz nie raz w tym temacie dlaczeo tak jest. Przetraw to a nie mnozysz jakies "wnioski"
@Black-Berry dla Twego dobra (i innych, ktorzy niedajboze by stwierdzili ze twoje "wnioski" są poprawne) - zamykam

edit: po wymianie PW okazalo sie, iż Black-Berry tylko sobie żartował, a on to wszystko oczywscie kuma, a my (ja i mike) nie zalapalismy jego grypsów.

No coż, widać z wiekiem trace poczucie humoru - starość nie radość
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.