Gå til innhold

Webkafeen


Anbefalte innlegg

Videoannonse
Annonse

Halp guis!

 

Kode:

<?php
if(round($_GET['n']) == $_GET['n']){
echo round($_GET['n']) . ' == ' . $_GET['n'] . ' # sant';
}else{
echo round($_GET['n']) . ' == ' . $_GET['n'] . ' # usant';
}
?>

 

URL: test2.php?n=foo

 

Output: 0 == foo # sant

 

Hvordan er dette mulig? Jeg irriterer meg over meg selv, fordi jeg mener jeg skjønner PHP ganske godt nå, og feiler på noe så lite som dette.

Lenke til kommentar
Halp guis!

 

Kode:

<?php
if(round($_GET['n']) == $_GET['n']){
echo round($_GET['n']) . ' == ' . $_GET['n'] . ' # sant';
}else{
echo round($_GET['n']) . ' == ' . $_GET['n'] . ' # usant';
}
?>

 

URL: test2.php?n=foo

 

Output: 0 == foo # sant

 

Hvordan er dette mulig? Jeg irriterer meg over meg selv, fordi jeg mener jeg skjønner PHP ganske godt nå, og feiler på noe så lite som dette.

 

Se litt på hvordan PHP konverterer strengverdier til heltall. Default er at en streng vil castes om til 0 hvis ikke strengen begynner med noen tall. Likhetsoperatoren vil automatisk caste om en streng til heltall hvis det skjer en sammenligning mellom heltall og en streng (eller to numeriske strenger), så den vil sammenligne 0 (resultatet av round()) med "foo". "foo" vil da videre bli castet til heltall, altså til 0, og likhetsoperatoren gir true som resultat. :)

 

Hvis ønsket oppførsel er å sjekke om _strengen_ "0" er lik _strengen_ "foo" kan du bruke typecasting;

 

<?php
if ((string) round($_GET['n']) == $_GET['n'])
{
echo round($_GET['n']) . ' == ' . $_GET['n'] . ' # sant';
}
else
{
echo round($_GET['n']) . ' == ' . $_GET['n'] . ' # usant';
}
?>

Lenke til kommentar
...eller du kan bruke tre likhetstegn, if (round($_GET['n']) === $_GET['n']) { ...

 

(tror jeg)

 

Både ja og nei. === sjekker for identitet (likt innhold OG lik type), så det kan virke som rette operator å bruke, men problemet er at $_GET og $_POST returnerer verdier som strenger, og $streng === $int vil alltid feile. I så fall må en typecaste strengen over til integer, og det er egentlig like strevsomt...

Lenke til kommentar
Har skrevet ferdig første del i en serie av artikler, har ikke lansert siden min sånn offisielt enda, men dere kan jo lese den og si hva dere syns: Konsekvent Design – Del 1, Layout

 

Synes du har et veldig flott design herr lovskogen. Men for å ikke lage en kjemepstor debatt her. Heter det ikke "De tre siste publiserte artiklene". Gleder meg til å navigere rundt på siden din etterhvert.

 

Kim...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...