Gå til innhold

PHP- & MySQL-innføring: Kapittel 5


Anbefalte innlegg

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
Videoannonse
Annonse

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 :hmm:

Lenke til kommentar
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
*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

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

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 av -Teddy-
Lenke til kommentar
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
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
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 av PsyDe
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...