In this part of the PHP programming tutorial, we will talk about functions.
A function is a piece of code in a larger program. The function performs a specific task. The advantages of using functions are:
The static variables are initiated only once, when the function is first called. They retain their value afterwards.
When we pass values by reference, the function receives a reference to the actual values. The original values are affected, when modified. This way of passing values is more time and space efficient. On the other hand, it is more error prone.
Which way of passing arguments should we use? It depends on the situation. Say we have a set of data, salaries of employees. If we want to compute some statistics of the data, we do not need to modify them. We pass by values. If we work with large amounts of data and the speed of computation is critical, we pass by reference. If we want to modify the data, e.g. do some reductions or raises to the salaries, we might pass by reference.
The following two examples cover both concepts.
The next code example passes values to the function by reference. The original variables are changed inside the swap function.
A typical example is calculation of the factorial.
In the next example, we will modify a value inside the function.
In this part of the PHP tutorial, we covered PHP functions.
A function is a piece of code in a larger program. The function performs a specific task. The advantages of using functions are:
- Reducing duplication of code
- Decomposing complex problems into simpler pieces
- Improving clarity of the code
- Reuse of code
- Information hiding
phpinfo()
, round()
or abs()
. The user defined functions are created by application programmers to cover their needs. They are created with the function
keyword. Defining functions
A function is created with thefunction
keyword. <?phpThe function keyword is followed by the function name with round brackets. The body of the function lies between the curly brackets. We say that we call a function. If we call a function, the statements inside the function body are executed.
function displayVersion() {
echo "this is PHP " . phpversion();
echo "\n";
}
displayVersion();
?>
displayVersion();This line of the code calls the function.
$ php simple.phpHere we see the outcome of the script.
this is PHP 5.2.6-2ubuntu4.5
The return keyword
The return keyword is used to return a value from the function. A function may or may not return a value.<?phpWe have a maximum() function. It returns a max for two numbers. We could not name it max, because there is already a built-in max() function.
function maximum($x, $y) {
if ($x > $y) return $x;
else return $y;
}
$a = 23;
$b = 32;
$val = maximum($a, $b);
echo "The max of $a, $b is $val \n";
?>
if ($x > $y) return $x;If the $x variable is greater than $y, we return $x. Otherwise we return $y.
else return $y;
$val = maximum($a, $b);The value returned by the maximum() function is assigned to the $val variable.
echo "The max of $a, $b is $val \n";We print the max value of the two numbers to the console.
Function arguments
Most functions accept arguments. Arguments are values, that are sent to the function. The functions process the values and possibly return them back.<?phpIn our example, we convert Fahrenheit temperature to Celsius. The FTC function accepts one argument $c, which is the Celsious temperature.
function FTC($c) {
return $c * 9/5 + 32;
}
echo FTC(100);
echo "\n";
echo FTC(0);
echo "\n";
echo FTC(30);
echo "\n";
?>
$ php fahrenheit.php
212
32
86
Implicit values
The arguments in PHP functions may have implicit values. An implicit value is used, if no value is provided.<?phpHere we created a power function. The function has one argument with an implicit value. We can call the function with one or two arguments.
function power($a, $b=2) {
if ($b == 2) {
return $a*$a;
}
$value = 1;
for ($i = 0; $i < $b; $i++) {
$value *= $a;
}
return $value;
}
$v1 = power(5);
$v2 = power(5, 4);
echo "5^2 is $v1 \n";
echo "5^4 is $v2 \n";
?>
$ php implicit.php
5^2 is 25
5^4 is 625
Static variables
A static variable is a variable that has been allocated statically, whose lifetime extends across the entire run of the program. (Wikipedia) The default, local variables do not retain their value within consecutive calls of the function.<?phpIn the above example, we have a normal, nonstatic variable. We increment the variable each time the function is called. We call the function 5 times. However, nonstatic variables are initiated for each call of the function. After 5 function calls the $value equals to 1.
function nonstatic() {
$value = 0;
$value += 1;
return $value;
}
nonstatic();
nonstatic();
nonstatic();
nonstatic();
echo nonstatic(), "\n";
?>
The static variables are initiated only once, when the function is first called. They retain their value afterwards.
<?phpAfter 5 consecutive calls, the $value is equal to 5.
function staticfun() {
static $value = 0;
$value += 1;
return $value;
}
staticfun();
staticfun();
staticfun();
staticfun();
echo staticfun(), "\n";
?>
$ php nonstatic.php
2
$ php static.php
6
Passing arguments by value, by reference
PHP supports two ways of passing arguments to functions. The default way is passing arguments by value. When we pass arguments by value, the function works only with the copies of the values. This may lead to performance overheads, when we work with large amounts of data.When we pass values by reference, the function receives a reference to the actual values. The original values are affected, when modified. This way of passing values is more time and space efficient. On the other hand, it is more error prone.
Which way of passing arguments should we use? It depends on the situation. Say we have a set of data, salaries of employees. If we want to compute some statistics of the data, we do not need to modify them. We pass by values. If we work with large amounts of data and the speed of computation is critical, we pass by reference. If we want to modify the data, e.g. do some reductions or raises to the salaries, we might pass by reference.
The following two examples cover both concepts.
<?phpThe swap function swaps the numbers between the $a, $b variables. The original variables are not affected.
function swap($a, $b) {
$temp = $a;
$a = $b;
$b = $temp;
echo "inside swap function:\n";
echo "\$a is $a \n";
echo "\$b is $b \n";
}
$a = 4;
$b = 7;
echo "outside swap function:\n";
echo "\$a is $a \n";
echo "\$b is $b \n";
swap($a, $b);
echo "outside swap function:\n";
echo "\$a is $a \n";
echo "\$b is $b \n";
?>
$a = 4;At the beginning, these two variables are initiated.
$b = 7;
swap($a, $b);We call the swap function. The function takes $a, $b variables as parameters.
$temp = $a;Inside the swap function, we change the values. Note that the $a, $b variables are defined locally. They are valid only inside the swap function.
$a = $b;
$b = $temp;
$ php swap.phpThe output shows, that the original variables were not affected.
outside swap function:
$a is 4
$b is 7
inside swap function:
$a is 7
$b is 4
outside swap function:
$a is 4
$b is 7
The next code example passes values to the function by reference. The original variables are changed inside the swap function.
<?phpWe use the & character to pass values by reference.
function swap(&$a, &$b) {
$temp = $a;
$a = $b;
$b = $temp;
echo "Inside the swap function:\n";
echo "\$a is $a \n";
echo "\$b is $b \n";
}
$a = 4;
$b = 7;
echo "Outside the swap function:\n";
echo "\$a is $a \n";
echo "\$b is $b \n";
swap($a, $b);
echo "Outside the swap function:\n";
echo "\$a is $a \n";
echo "\$b is $b \n";
?>
function swap(&$a, &$b) {The example is almost identical to the previous one. Except for the ampersand characters.
...
}
$ php swap2.phpHere we see, that the swap function really changed the values of the variables.
Outside the swap function:
$a is 4
$b is 7
Inside the swap function:
$a is 7
$b is 4
Outside the swap function:
$a is 7
$b is 4
Recursion
Recursion, in mathematics and computer science, is a method of defining functions in which the function being defined is applied within its own definition. (Wikipedia) In other words, a recursive function calls itself to do its job. Recursion is a widely used approach to solve many programming tasks.A typical example is calculation of the factorial.
<?phpIn this code example, we calculate the factorial of two numbers.
function factorial($n) {
if ($n==0) {
return 1;
} else {
return $n * factorial($n - 1);
}
}
echo factorial(4), "\n";
echo factorial(10), "\n";
?>
return $n * factorial($n - 1);Inside the body of the factorial function, we call the factorial function with a modified argument. The function calls itself.
$ php recursion.phpThese are the results.
24
3628800
Global and local variables
Next we will talk about the scope of the variables in PHP. A scope is the range in which a variable can be referenced. When we work with functions, there are two basic scopes. The global and the local scope. The local scope is also called a function scope.<?phpA variable defined outside a function body cannot be referenced within a function.
$value = 1;
function simple() {
var_dump($value);
}
simple();
?>
$ php scope.phpThe $value variable is NULL in the simple() function.
NULL
<?phpIn this example, we have two variables with the same name. They do not collide, because they exist in different scopes.
$value = 4;
function simple() {
$value = 3;
echo $value, "\n";
}
simple();
echo $value, "\n";
?>
$ php scope1.phpThe value is 3 inside the function. 4 outside the function.
3
4
In the next example, we will modify a value inside the function.
<?phpWe use the
$value = 1;
function simple() {
global $value;
$value = 2;
}
echo $value, "\n";
simple();
echo $value, "\n";
?>
global
keyword to reference a variable defined outside the body of the function. $ php scope2.phpThe $value was successfully modified inside the simple() function.
1
2
In this part of the PHP tutorial, we covered PHP functions.
0 comments:
Post a Comment