Avatar billede googolplex Novice
08. marts 2005 - 10:10 Der er 13 kommentarer og
1 løsning

Castes til integer

Jeg er i tvivl om hvilken af følgende fremgangsmåder der er bedst:

public function setPollStatus($pollStatus = true)
{
    $status = ($pollStatus == true) ? 1 : 0;
}

Eller:

public function setPollStatus($pollStatus = true)
{
    $status = (int)$pollStatus;
}

Eller måske et tredje alternativ ?
Avatar billede sone Nybegynder
08. marts 2005 - 10:38 #1
Jeg vil mene at den første er den mest "korrekte", selv om nr. 2 sikkert også virker fint.
Se evt. også på http://de2.php.net/manual/en/function.intval.php
Avatar billede bojo Nybegynder
08. marts 2005 - 10:50 #2
i C ville $status = (int)$pollStatus; være den korrekte måde at type caste på. I PHP ville jeg nok bruge settype($status, "integer");
Avatar billede coderdk Praktikant
08. marts 2005 - 11:35 #3
Jeg ville klart foretrække den første googolplex. Det giver ikke megen mening at sætte $status = (int) true;
Avatar billede googolplex Novice
08. marts 2005 - 12:13 #4
Jeg vil bare gerne sikre at jeg ender med enten int 0 eller 1. Så vidt jeg kan se virker begge.

coderdk: Hvorfor giver den sidste ikke mening ?
Avatar billede coderdk Praktikant
08. marts 2005 - 12:15 #5
Rent logisk giver det ikke mening at konvertere en bool til en int (ja, 0 = false, og 1 = true - men alligevel) :)
Jeg holder på den første ;)
Avatar billede bojo Nybegynder
08. marts 2005 - 17:23 #6
Manualen anbefaler den gode gamle C type-cast: (int) eller settype.
http://dk.php.net/language.types.type-juggling

Profileren i PHPed siger

13.98 ms : $i =  $i - 0;
19.32 ms : $i = (int)$i;
23.30 ms : $status = ($pollStatus == true) ? 1 : 0;

ved denne lille test

<?php
$pollStatus=true;
for( $i=0; $i < 10000; $i++ ) {
    $i =  $i - 0;
    $i = (int)$i;
    $status = ($pollStatus == true) ? 1 : 0;
}
?>

og debuggeren siger at de alle levere en int, så vælg selv :-)
Avatar billede coderdk Praktikant
08. marts 2005 - 18:30 #7
Hvorfor så ikke bare:

public function setPollStatus($pollStatus = true)
{
    $status = $pollStatus;
}
Avatar billede bojo Nybegynder
08. marts 2005 - 18:46 #8
Så er ønsket om at få en integer ikke opfyldt, $status vil være af typen boolean
Avatar billede coderdk Praktikant
08. marts 2005 - 18:50 #9
Spørgsmålet er om han har brug for andet? En:

  mysql_query( sprintf( "INSERT INTO tabel (status) VALUES ('%s')", true ) );

Vil indsætte et 1 - Eller det gør den i PHP4 - Gider ikke lige SSH'e til min egen server med PHP5 ;P
Avatar billede bojo Nybegynder
08. marts 2005 - 19:04 #10
Enig, jeg svare bare på det stillede spg. og spekulere ikke over hvad f* han vil med det :-) men pyt, der er muligheder nok at vælge mellem nu.
Avatar billede googolplex Novice
08. marts 2005 - 22:10 #11
Ja, det er fordi jeg har et status felt i min db af typen int(1), der enten skal være 1 eller 0.

Men hvis det er muligt at oprette et bolean felt i mysql ville det da være nemmere. Nogen der ved om dette kan lade sig gøre ?
Avatar billede coderdk Praktikant
08. marts 2005 - 22:26 #12
googolplex, Det er ikke nødvendigt, som jeg skrev i mit sidste eksempel, så bliver der sat 1 ind for true og 0 ind for false, også selvom det er PHP's "true" eller "false"
Avatar billede googolplex Novice
09. marts 2005 - 00:56 #13
svar ?
Avatar billede coderdk Praktikant
09. marts 2005 - 01:01 #14
Ellers tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester