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.
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 echofloatval($ip)==intval($ip);// jos uvek false ali ce da pokusa int u sledecem koraku echointval($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 echofloatval($ip)==intval($ip);// jos uvek false ali ce da pokusa int u sledecem koraku echointval($ip)==intval($ip);// intval nije prosao
Potpis
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
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.
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.
Potpis
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
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.. :)
Potpis
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.
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
Potpis
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. Potpis
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
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
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. Potpis
[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]