Genomgång 9 - Funktioner (referenser och default)

<?php
 
// Defaultvärde kan anges för en parameter.
// Det används om inget annat skickas till funktionen.
function thousands($tal = 1) {
  return $tal*1000;
}
 
// & betyder att man skickar en referens istället för att
// göra en kopia av värdet. Man får ett nytt namn på samma
// variabel (samma minnesposition). Ändras värdet i funktionen
// så ändras det även i huvudprogrammet.
function backwards(&$tal){  
  $ental = $tal % 10;   // % ger resten
  $temp = (int)($tal / 10); // För att få heltalsdelen.
  $tiotal = $temp % 10;
  $tal = $tiotal + 10 * $ental; // Vänder på talet.
}
 
// Funktionen adderar $num till alla tal i arrayen.
// I php får man en kopia av arrayen i funktionen.
// (I många andra språk skickas arrayer alltid som referens.)
// Ändras arrayen i funktionen händer inget med den 
// i huvudprogrammet.
function arrayadd($arr, $num){ 
   $i = 0;
   while($i < count($arr)){
     $arr[$i] = $arr[$i] + $num;
	 $i++;
   }
   return $arr;  // Returnerar en array.
}
 
// I denna funktion skickas bara en referens till 
// den array som finns i huvudprogrammet. Det blir
// ett nytt namn till samma array. När arrayen ändras
// i funktionen ändras den även i huvudprogrammet.
function arrayadd2(&$arr, $num){
   $i = 0;
   while($i < count($arr)){
     $arr[$i] = $arr[$i] + $num;
     $i++;
   }
}
 
include('head.php');
$tal1 = 18;
echo 'tal1: ' . $tal1 . '<br>';
echo 'thousands($tal1): ' . thousands($tal1) . '<br>'; 
echo 'thousands(): ' . thousands() . '<br>';
 
echo 'tal1: ' . $tal1 . '<br>';
backwards($tal1);
echo 'tal1 efter backwards: ' . $tal1 . '<br>';
 
$arr1 = [1,3,4];
$arr2 = arrayadd($arr1, 5);
print_r($arr1);
echo ' $arr1 <br>';
print_r($arr2);
echo ' $arr2 <br>';
 
arrayadd2($arr1, 10);
print_r($arr1);
echo ' $arr1 <br>';
 
include('foot.php');
 
/*
Följande skrivs ut när programmet körs:
 
tal1: 18
thousands($tal1): 18000
thousands(): 1000
tal1: 18
tal1 efter backwards: 81
Array ( [0] => 1 [1] => 3 [2] => 4 ) $arr1 
Array ( [0] => 6 [1] => 8 [2] => 9 ) $arr2 
Array ( [0] => 11 [1] => 13 [2] => 14 ) $arr1 
 
*/