dios Skrevet 8. november 2006 Del Skrevet 8. november 2006 tå i double quotes som du helt riktig påpeker, men som du viste over så er dette ikke noe problem å omgå. Det er stor forskjell på å bruke double quotes kun på \t , \n etc. , og å bruke det på hele strengen. For øvrig er det unødvendig å bruke \t, \n o.l. når du har enkeltfnutter, siden disse kan inkluderes verbatim: <?php echo '<pre>foo bar zot zot zot</pre>'; ?> (hmm, IPB sin code-greie fikler til taben, men-men) Lenke til kommentar
Crowly Skrevet 8. november 2006 Del Skrevet 8. november 2006 Stortsett så bruker jeg \n til å gjøre html koden mer lesbar, ikke til å formatere hvordan teksten skal plasseres, da bruker jeg heller <br /> for linjeskift. Er vel mye som kan gjøres for å optimalisere kode, så det er jo greit å legge inn funksjonen for å sjekke hvor lang tid det tar for å kjøre/utføre skripet, tar det noen hundredeler så er det neppe nødvendig å tenke så mye på optimalisering. Men er vel "mange bekker små" prinsippet som gjelder, så det vel greit å legge opp til en kode stil som ikke bevist er tregere Lenke til kommentar
kilogram Skrevet 9. november 2006 Forfatter Del Skrevet 9. november 2006 Som dere ser, så er det mye mere effektivt å skrive f.eks.:$var = 'Dette er en streng'; enn: $var = "Dette er en streng"; Noe å tenke på kanskje? 7236613[/snapback] Eg er fullstendig klar over at double-quotes er litt treigare enn single-quotes, men det er ikkje "mye mere effektivt" som du skriver over. I dei aller fleste tilfeller kan du unngå å evaluere string-literaler som du har gjort i eksempelet over ved å flytte evalueringen av string-literalet utanfor loopen. Husk at forskjellen på single- og double-quoted kun skjer når du faktisk bruker string-literaler i koden din, og det er jo god programmeringspraksis å unngå (ikkje det at vi har komt så langt at vi har dekt det i guiden enno). Når du henter ting ut fra MySQL, blir det bare brukt string-literaler dersom du faktisk vil konkatenere noe; echo "cheers: " . $result[0]; Og i dette tilfellet kan du bare lagre "cheers: " i ein variabel før du evt. starter loopen. Uansett kan eg ikkje finne nokon tilfeller der du skal ha behov for å bruke string-literaler 1 000 000 ganger i ein loop. Her er forresten min forandra versjon av skriptet ditt, eg endra og $var til å berre vere ein enkel variabel i staden for ein array så eg fekk den til å køyre under minnegrensa på testmaskina mi. <?php function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } /** * Test performance of single vs double quotes * * @param bool $double * @param int $loop */ function test_speed($double = false, $loop = 0) { $result = array(); for($i=0; $i < $loop; $i++) { $time = time(); $microtime = microtime_float(); $time_start = microtime_float(); $str = ($double) ? "This test was started at $time ($microtime)" : 'This test was started at '.$time.' ('.$microtime.')'; for($ii=0; $ii < 1000000; $ii++) { $var = $str; } $time_end = microtime_float(); $time = $time_end - $time_start; $result[$i+1] = $time; } $quotes = ($double) ? 'double' : 'single'; echo 'Time taken with '.$quotes.' quotes:<br />'; foreach ($result as $key => $value) { echo ($key).' : '.$value."<br/>"; } } // test_speed test_speed(false, 5); // Single test_speed(true, 5); // Double ?> Resultat: Time taken with single quotes: 1 : 0.338544130325 2 : 0.335707902908 3 : 0.334450960159 4 : 0.339344978333 5 : 0.33570599556 Time taken with double quotes: 1 : 0.338403940201 2 : 0.338147878647 3 : 0.337364912033 4 : 0.335648059845 5 : 0.338130950928 Edit: Hmm... Ser ut til at forumet fjerner \t fra koden. Kjipt, men det er fremdeles litt lesbart. Lenke til kommentar
Peter Skrevet 9. november 2006 Del Skrevet 9. november 2006 Slike ting hører allikevel ikke med i en nybegynnerguide etter min mening. Det kan/burde dog kanskje nevnes i en slags optimaliseringsguide som kommer etter alt det andre som er planlagt å skrive om først. Lenke til kommentar
Ernie Skrevet 10. november 2006 Del Skrevet 10. november 2006 *snipp*Her er resultatet: Time taken with single quotes: 1 : 5.74370908737 2 : 5.70529007912 3 : 5.89124107361 4 : 5.42553114891 5 : 6.39423799515 Time taken with double quotes: 1 : 7.82924795151 2 : 7.80135393143 3 : 8.10489392281 4 : 7.66670608521 5 : 8.62187695503 Som dere ser, så er det mye mere effektivt å skrive f.eks.: $var = 'Dette er en streng'; enn: $var = "Dette er en streng"; Noe å tenke på kanskje? 7236613[/snapback] Mye mer effektivt? Du er klar over at du snakker om en besparelse på ca 2,2µs pr. utføring? Det er hva jeg kaller ubetydelig. Med 500 sånne besparelser har du bare spart ca 1,1ms. Jeg ville heller tenkt litt på ting som struktur i løkker, filaccess, tilkobling mot database etc. før akkurat det med ' og ". PHP er ikke akkurat så veldig raskt kontra ting som CGI, JSP o.l., så hvis du på død og liv må ha ytelse for alle pengene er PHP helt feil å satse på. Lenke til kommentar
Arwe Skrevet 13. november 2006 Del Skrevet 13. november 2006 Er det noen som har et fornuftig svar på hvorfor denne koden ikke virker for meg? <?php function SirkelInfo($radius) { $info['radius'] = $radius; $info['areal'] = $radius * $radius * 3.14; $info['omkrets'] = $radius * 2 * 3.14; return $info; } $info = SirkelInfo(3); echo "En sirkel med radius 3 har en omkrets ". "på $info['omkrets'] og areal på $info['areal']<br/>"; ?> Lenke til kommentar
-Teddy- Skrevet 13. november 2006 Del Skrevet 13. november 2006 (endret) Du har ikke "hentet" funksjonen. Legg til: PHP SirkelInfo($radius) etter funksjonen så tror jeg det skal gå bra. Har ikke lest guiden selv enda, noe jeg burde ha gjort, men tror det der skal funke. Ikke skyt meg om jeg tar feil, bare minns at jeg gjorde samme feil en gang selv. Endret 13. november 2006 av -Teddy- Lenke til kommentar
anderfo Skrevet 13. november 2006 Del Skrevet 13. november 2006 Er det noen som har et fornuftig svar på hvorfor denne koden ikke virker for meg? <?php function SirkelInfo($radius) { $info['radius'] = $radius; $info['areal'] = $radius * $radius * 3.14; $info['omkrets'] = $radius * 2 * 3.14; return $info; } $info = SirkelInfo(3); echo "En sirkel med radius 3 har en omkrets ". "på $info['omkrets'] og areal på $info['areal']<br/>"; ?> 7279007[/snapback] Antakelig fordi innholdet i arrayen ikke er tekststrenger, men tall. Bytt ut utskriften din med: echo "En sirkel med radius 3 har en omkrets ". "på " . $info['omkrets'] . " og areal på " . $info['areal'] . "<br/>"; så funker det ihvertfall hos meg. Lenke til kommentar
dios Skrevet 13. november 2006 Del Skrevet 13. november 2006 Er det noen som har et fornuftig svar på hvorfor denne koden ikke virker for meg? echo "En sirkel med radius 3 har en omkrets ". "på $info['omkrets'] og areal på $info['areal']<br/>"; ?> Du sier jo ikke noe om hvilken feilmelding du får eller hva som er galt. Det er regel nummer EN når du trenger hjelp! Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING Dette skyldes at du har $info['omkrets'] inne i teksten uten å behandle det på rett måte. Prøv følgende istedenfor (demonstrerer to måter å gjøre det på): echo "En sirkel med radius 3 har en omkrets på ". $info['omkrets']." og et areal på {$info['areal']}<br/>"; Lenke til kommentar
Kent (StudioFreya) Skrevet 13. november 2006 Del Skrevet 13. november 2006 (endret) Er det noen som har et fornuftig svar på hvorfor denne koden ikke virker for meg? <?php function SirkelInfo($radius) { $info['radius'] = $radius; $info['areal'] = $radius * $radius * 3.14; $info['omkrets'] = $radius * 2 * 3.14; return $info; } $info = SirkelInfo(3); echo "En sirkel med radius 3 har en omkrets på $info['omkrets'] og areal på $info['areal']<br/>"; ?> 7279007[/snapback] Dette er koden du leter etter. <?php echo "En sirkel med radius 3 har en omkrets på $info[omkrets] og areal på $info[areal]<br/>"; ?> Legg merke til at jeg har fjernet "'". Endret 13. november 2006 av PsyDe Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå