Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP bug ili mi nesto nije jasno

[es] :: PHP :: PHP bug ili mi nesto nije jasno

[ Pregleda: 3407 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon PHP bug ili mi nesto nije jasno20.09.2011. u 22:55 - pre 152 meseci
Code (php):

$ip = '127.0.1.1';
echo $ip == intval($ip); // true

$ip = '127.1.1.1';
echo $ip == intval($ip); // false
 


I kada sam prijavio bug dobio sam odgovor da to nije bug i da treba da procitam manual.

Uopste mi nije jasno kojom logikom radi. Oba slucaja MORAJU da daju false.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: PHP bug ili mi nesto nije jasno20.09.2011. u 23:28 - pre 152 meseci
Ne bi trebalo da bude false, jer ti "==" automatski konvertuje promenljivu iz stringa u integer pri poredjenju. Samim tim, 127 = 127 u prvom slucaju. Ne znam zasto i u drugom slucaju nije true, moje misljenje je da ima veze sa zaokruzivanjem.

http://php.net/manual/en/function.intval.php - ovde mozes naci dosta informacija :)

[Ovu poruku je menjao Zlatni_bg dana 21.09.2011. u 00:39 GMT+1]
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: PHP bug ili mi nesto nije jasno21.09.2011. u 11:39 - pre 152 meseci
Izgleda da nije problem u intval nego u ==.
Posto je sa jedne strane integer PHP sa druge strane da stavi broj pa uradi prvo float pa int.
i onda se dodje na :
Code (php):

$ip = '127.0.1.1';
echo $ip == intval($ip); // true
//radi ovo posto je sa desne strane int
echo floatval($ip) == intval($ip); // jos uvek false ali ce da pokusa int u sledecem koraku
echo intval($ip) == intval($ip); // i dobije se true
 


druga ip gde nije 0 drugi broj
Code (php):

$ip = '127.1.1.1';
echo $ip == intval($ip); // true
//radi ovo posto je sa desne strane int
echo floatval($ip) == intval($ip); // jos uvek false ali ce da pokusa int u sledecem koraku
echo intval($ip) == intval($ip); // intval nije prosao
 



[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: PHP bug ili mi nesto nije jasno21.09.2011. u 11:56 - pre 152 meseci
Ako izbacimo intval i stavimo samo brojeve, imamo:

Code:

<?php
$ip = '127.0.1.1';

echo  $ip==127;

$ip='127.1.1.1';

echo $ip==127;

?>


Ovo daje isto kao i kod u inicijalnom postu. Na php.net piše da se kod operatora == promenljive postavljaju na zajednički tip (ovde valjda integer), ali biće da uzima decimalu iza tačke, tj u prvom slučaju 127.0, a u drugom 127.1.
Kao da rezultat intval pri poređenju tretira kao floatval.
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: PHP bug ili mi nesto nije jasno21.09.2011. u 12:28 - pre 152 meseci
Pa cak i da uzima float, trebalo bi u oba slucaja da daje true...
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

maksvel

Član broj: 107376
Poruke: 2417

Jabber: maksvel
Sajt: maksvel.in.rs


+161 Profil

icon Re: PHP bug ili mi nesto nije jasno21.09.2011. u 12:48 - pre 152 meseci
Nagađam, ali mi se čini da za 127.0 konta da je isto što i 127, a za 127.1 da nije.
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: PHP bug ili mi nesto nije jasno21.09.2011. u 13:50 - pre 152 meseci
Citat:
maksvel: Nagađam, ali mi se čini da za 127.0 konta da je isto što i 127, a za 127.1 da nije. :)


Pa 127 je jednako sa 127.0 ali je problem kako dodje do 127.0.
Cim je sa leve strane pretvorio 127.0.1.1 u 127.0 treba da konta da to nije to i da stane.
Drugo je da sam imao 127.0 kao string i on ga pretvorio u 127.0 kao broj pa to je isto i onda moze dalje da poredi.
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Zlatni_bg
Nikola S
Beograd

Član broj: 65708
Poruke: 4420
*.dynamic.sbb.rs.



+498 Profil

icon Re: PHP bug ili mi nesto nije jasno21.09.2011. u 17:27 - pre 152 meseci
Ali radi se o tome da uopste ne treba da radi sa float vrednostima, trebalo bi sve da konveruje u integer posto je "intval" funkcija iskoriscena u poredjenju... a i kako god da poredi, poredi 2 iste vrednosti koje se konvertuju opet na ISTI nacin, tako da bi trebalo da daju iste konvertovane vrednosti... ako ima neko logicno objasnjenje za ovaj drugi slucaj bilo bi lepo da se javi.. :)
THE ONLY EASY DAY WAS YESTERDAY
 
Odgovor na temu

vilyu
Web Developer
Beograd, Srbija

Član broj: 1188
Poruke: 444



+2 Profil

icon Re: PHP bug ili mi nesto nije jasno21.09.2011. u 23:02 - pre 152 meseci
Zaista i piše u manual-u objašnjenje za ovakvo ponašanje:

String conversion to numbers
Citat:
If the string does not contain any of the characters '.', 'e', or 'E' and the numeric value fits into integer type limits (as defined by PHP_INT_MAX), the string will be evaluated as an integer. In all other cases it will be evaluated as a float.

Type Juggling
Citat:
If either operand is a float, then both operands are evaluated as floats, and the result will be a float.

Što će reći da se string 127.1.1.1 konvertuje u float jer sadrži tačku, a zatim se u poređenju sa int-om int konvertuje u float. Dakle, dešava se:
1) '127.1.1.1' == 127
2) 127.1 == 127
3) 127.1 == 127.0
=>false
Pera električar 0637129710, BG, preporučujem.
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: PHP bug ili mi nesto nije jasno21.09.2011. u 23:32 - pre 152 meseci
Da, ali ja nisam radio matemtaicku operaciju po kojoj je on mogao da zakljuci da li ja radim sa brojevima ili stringovima
jer nema matemtaickih operacija sa stringovima.
Radio sam operaciju poredjenja i to je moguce sa stringovima.
Ne znam na koji nacin sam ga naveo da on razmislja sa float-ovima.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Marko Medojević
Team leader
Digital ST
Beograd

Član broj: 93659
Poruke: 776
*.dynamic.isp.telekom.rs.

Sajt: www.digitalst.rs


+99 Profil

icon Re: PHP bug ili mi nesto nije jasno22.09.2011. u 13:57 - pre 152 meseci
Kod:
Code:

$ip1 = '127.0.1.1';
$ip2 = '127.1.1.1';

echo (double)$ip1 . "\n";
echo (double)$ip2 . "\n";


Output:

127.0
127.1
 
Odgovor na temu

omega_bg88
Web Developer

Član broj: 290854
Poruke: 1
*.dynamic.isp.telekom.rs.



Profil

icon Re: PHP bug ili mi nesto nije jasno22.09.2011. u 14:31 - pre 152 meseci
Nevezano da li se radi o aritmetičkoj ili logičkoj operaciji između stringa i broja (int ili float), sa stringom se dešava sledeće:
- ako sadrži broj na svom početku, biva cast-ovan u int
- ako sadrži broj iza koga sledi na početku iza koga se nalazi '.' , biva cast-ovan u float
- ako sadrži bilo koji drugi karakter na početku, tretira se kao 0

Npr.

'2' + 2 = 4;
'2.5' + 2 = 4.5;
'.5' + 1 = 1.5;
'2somestring' + 2 = 4;
'somestring' + 2 = 2;

[Ovu poruku je menjao omega_bg88 dana 22.09.2011. u 19:58 GMT+1]
 
Odgovor na temu

ImPlant
Panajotis Zamos
bgd

Član broj: 730
Poruke: 238
*.dynamic.sbb.rs.

Jabber: aqw137@gmail.com
Sajt: weevify.com


Profil

icon Re: PHP bug ili mi nesto nije jasno10.10.2011. u 21:04 - pre 151 meseci
nije bug, vilyu je lepo objasnio zasto takav rezultat.

za sta ti ovo tacno treba?

da bi se osigurao eksplicitno kastuj i levu stranu u int

Code (php):

$ip = '127.0.1.1';
echo $ip == intval($ip); // true

$ip = '127.1.1.1';
echo (int)$ip == intval($ip); // true
 


ili mozda jos bolje da koristis sledecu proveru (da li $ip pocinje sa 127)

Code (php):

\strpos($ip, '127') === 0
 

PS. obavezno koristi === da ne bi dobio lazno tacno poredjenje
look
closer

DON'T
PANIC
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.dynamic.isp.telekom.rs.



+218 Profil

icon Re: PHP bug ili mi nesto nije jasno11.10.2011. u 10:26 - pre 151 meseci
Meni ne treba da je 127 jednako sa 127 nego da je 127 razlicito od 127.0.0.1.
Tako da (int) ili === mi nista ne znaci.
Nije mi logicno da on sam pretvara string u integer. Logicnije mi je da integer pretvori u string prilikom poredjenja jer se pri takvom poredjenju sadrzaj varijabli ne menja.

Resio sam tako sto sam mu naredio da je onaj intval string.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

[es] :: PHP :: PHP bug ili mi nesto nije jasno

[ Pregleda: 3407 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.