Lär dig PHP – Funktioner

augusti 6th, 2010 by Kristoffer Leave a reply »

PHPFunktioner är ett sätt att dela upp kodstycken på, dels för att skapa en bättre struktur, men kanske framför allt för att ta ut bitar ur koden som ska användas mer än en gång. Man kan genom dela upp kod som ska återanvändas vid flera tillfällen använda include, hämta in funktioner från PHP-filer och på så vis få en bättre och mer översiktlig struktur på all kod.

Funktionerna kan även göras ”dynamiska” för att minska mängden kod du behöver skriva. Beroende på vad vi skickar till funktionen, säga åt den att göra ett av x-antal saker.

Ett väldigt simpelt exempel på detta är om vi skulle få för oss att bygga någonting som antingen multiplicerar eller adderar två tal man skriver in i ett formulär.

Exempel 16 – mini-miniräknare

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>räknare</title>
</head>
<body>
	<?php
	function _calc($cmethod, $varde_1, $varde_2) {
 
		if($cmethod == "multiply") {
			$totalt = $varde_1 * $varde_2;
 
		} elseif($cmethod = "add") {
			$totalt = $varde_1 + $varde_2;
 
		} else {
			$total	= "n/a";
 
		}
		return $totalt;
	 }
 
	if(isset($_POST['skicka'])) {
 
		$tal_1 = $_POST['tal_1'];
		$tal_2 = $_POST['tal_2'];
		$ctype = $_POST['ctype'];
 
			if (empty($tal_1) || empty ($tal_2)) {
				echo 'Du har inte fyllt i båda fälten korrekt';
 
			} elseif(is_numeric($tal_1) == false || is_numeric($tal_2) == false) {
				echo 'Du får bara ange siffror i fälten';
 
			} else {
				echo "$tal_1 * $tal_2 = " . _calc($ctype,$tal_1,$tal_2);
 
			}
 
	}
 
	?>
	<form method="post" action="ex.php">
		Skriv in ett tal<br />
		<input type="text" name="tal_1" /><br />
		<input type="radio" name="ctype" value="multiply" checked> *<br />
		<input type="radio" name="ctype" value="add"> +<br />
		Skriv in ett till tal<br />
		<input type="text" name="tal_2" /><br />
		<input type="submit" name="skicka" value="skicka" />
	</form>
</body>
</html>

Genom att använda ett formulär, en funktion och ett par variablar, får vi en ack så liten, men välfungerande miniräknare som kan hantera multiplikation och addition.

Genom att vi först via formuläret skriver in två tal samt räknesättet och trycker skicka, så laddas sidan om och sparar värdena i $tal_1- och $tal_2-variablarna. Vi kan sedan i nästa steg kontrollera om dessa två variablar innehåller någonting. Om de inte gör det skriver vi ut ett felmeddelande, om de innehåller någonting går skriptet vidare till nästa del.

I elseif kontrollerar vi om de inskickade värdena är numeriska, och det görs med PHP-funktionen is_numeric() som returnerar false om värdena är allt annat än numeriska.

Om elseif inte blir sann (värdena är numeriska) tar else-satsen över och här skickar vi värdena i variablerna till funktionen _calc() där dem sparas om till $cmethod, $varde_1 och $varde_2.

Därefter kontrollerar vi vilket räknesätt funktionen ska använda, dvs kollar vilken radio-knapp som var ikryssad, och sedan multipliceras/adderas talen och sparas i variablen $totalt som vi genom return skickar tillbaka, in i echo. Vi anropar alltså funktionen _calc() i samma veva som vi skriver ut allting.

Vi skulle mycket enkelt kunna flytta ut funktionen _calc() genom att använda include(). Detta gör vi på följande sätt.

Funktionsfil.php

<?php
	function _calc($cmethod, $varde_1, $varde_2) {
 
		if($cmethod == "multiply") {
			$totalt = $varde_1 * $varde_2;
 
		} elseif($cmethod = "add") {
			$totalt = $varde_1 + $varde_2;
 
		} else {
			$total	= "n/a";
 
		}
		return $totalt;
	 }
?>

Huvud_fil.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>räknare</title>
</head>
<body>
 
	<?php
        include("Funktionsfil.php");
	if(isset($_POST['skicka'])) {
 
		$tal_1 = $_POST['tal_1'];
		$tal_2 = $_POST['tal_2'];
		$ctype = $_POST['ctype'];
 
			if (empty($tal_1) || empty ($tal_2)) {
				echo 'Du har inte fyllt i båda fälten korrekt';
 
			} elseif(is_numeric($tal_1) == false || is_numeric($tal_2) == false) {
				echo 'Du får bara ange siffror i fälten';
 
			}else {
				echo "$tal_1 * $tal_2 = " . _calc($ctype,$tal_1,$tal_2);
 
			}
 
	}
 
	?>
	<form method="post" action="ex.php">
		Skriv in ett tal<br />
		<input type="text" name="tal_1" /><br />
		<input type="radio" name="ctype" value="multiply" checked> *<br />
		<input type="radio" name="ctype" value="add"> +<br />
		Skriv in ett till tal<br />
		<input type="text" name="tal_2" /><br />
		<input type="submit" name="skicka" value="skicka" />
	</form>
</body>
</html>

Vi har nu placerat funktionen _calc() i en annan fil som vi genom PHP-funktionen include() anropar. På så sätt kan vi använda funktionen _calc () fler gånger i andra script. Att programmera med funktioner är att rekommendera vid större applikationer och vid tillfällen då kod kommer upprepas.

Advertisement

Kommentera