Guide: PHP- & MySQL-innføring: Kapittel 3
Kontrollering av verdier
Det er nok en gang klart for et nytt kapittel i vår PHP-guide. Nå ser vi på hvordan vi kan utføre ulike handlinger basert på betingelser.
Uendelige løkker
Som vi så i vårt aller første eksempel med while-løkken er det fullt mulig å konstruere løkker som fortsetter i all evighet. Som standard er max_execution_time, altså den maksimalt tillate tiden et skript har på å bli ferdig med kjøringen, satt til 30 sekunder i php.ini (PHPs konfigurasjonsfil). Et skript som overksrider denne begrensingen vil resultere i en feilmelding som ser slik ut:
Fatal error: Maximum execution time of 30 seconds exceeded in [fil] on line [linje]
Med andre ord vil en uendelig løkke som standard bli stoppet etter ett halvt minutt, slik at den ikke spiser opp ressursene til serveren.
I enkelte tilfeller kan det imidlertid være nyttig, om ikke nødvendig, å sette denne tidsbegrensingen høyere. Dette bruker vi funksjonen ini_set() til. Ved utførelse vil denne funksjonen midlertidig endre en eller flere av konfigurasjonene i php.ini. Med andre ord vil ikke disse endringene påvirke andre skript.
La oss si at vi har en enorm løkke som ved kjøring vil overstige tidsbegrensingen. Dette er, selv på svakere servere, relativt vanskelig å få til, men skriver man for eksempel store filer til disken er det godt mulig å overstige denne begrensningen. Vi benytter da ini_set("max_execution_time", "120");. I eksempelet vårt definerer vi at maks tid skriptet har for utførelse vil være 120 sekunder.
Alternativ kontroll-syntaks
Forskjellige programmeringsspråk har forskjellig syntaks, men PHP forsøker å gi muligheter for mange typer syntaks, slik at overgangen fra et språk til PHP skal være så lite smertefull som mulig. Til nå har vi sett på den normale metoden å utføre kontroller med PHP, men vi kan også bruke en mer utradisjonell metode. La oss gå rett på sak, og se hvordan en enkel if-else-kontroll kan skrives på en annen måte.
if ($tall == 0):
echo "$tall er 0";
elseif ($tall == 1):
echo "$tall er 1";
endif;
Skulle vi ha skrevet en while-løkke på denne måten ville det sett slik ut:
$nummer = 1;
while ($nummer <= 5):
echo "Dette er linje nummer $nummer<br>";
$nummer++;
endwhile;
Så hvorfor bruke dette? Det finnes egentlig ingen god grunn - ytelsesmessig skal de være omtrent helt like. I tidligere versjoner av PHP ble kontroller skrevet på denne måten, og fordi brukere er vant med denne syntaksen både fra andre programmeringsspråk og fra tidligere versjoner av PHP er det fortsatt mulig å skrive på denne måten. Det er med andre ord et spørsmål om smak.