Values are returned by using the optional return statement. Any type may be returned, including lists and objects.
function my_sqrt ($num) {
return $num * $num;
}
echo my_sqrt (4); // outputs '16'.
Multiple values may not be returned, but the same effect can be achieved by returning a list:
function foo() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = foo();
Information may be passed to functions via the argument list, which is a comma-delimited list of variables and/or constants.
PHP supports passing arguments by value (the default), passing by reference, and default argument values. Variable-length argument lists are not supported, but a similar effect may be achieved by passing arrays.
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
By default, function arguments are passed by value. If you wish to allow a function to modify its arguments, you may pass them by reference.
If you wish a function's argument to always be passed by reference, you can prepend an ampersand (&) to the argument name in the function definition:
function foo( &$bar ) {
$bar .= 'and something extra.';
}
$str = 'This is a string, ';
foo ($str);
echo $str; // outputs 'This is a string, and something extra.'
If you wish to pass a variable by reference to a function which does not do this by default, you may prepend an ampersand to the argument name in the function call:
function foo ($bar) {
$bar .= ' and something extra.';
}
$str = 'This is a string, ';
foo ($str);
echo $str; // outputs 'This is a string, '
foo (&$str);
echo $str; // outputs 'This is a string, and something extra.'
A function may define C++-style default values for scalar arguments as follows:
function makecoffee ($type = "cappucino") {
echo "Making a cup of $type.\n";
}
echo makecoffee ();
echo makecoffee ("espresso");
The output from the above snippet is:
Making a cup of cappucino.
Making a cup of espresso.
The default value must be a constant expression, not (for example) a variable or class member.
Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected. Consider the following code snippet:
function makeyogurt ($type = "acidophilus", $flavour) {
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt ("raspberry"); // won't work as expected
The output of the above example is:
Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry .
Now, compare the above with this:
function makeyogurt ($flavour, $type = "acidophilus") {
return "Making a bowl of $type $flavour.\n";
}
echo makeyogurt ("raspberry"); // works as expected
The output of this example is:
Making a bowl of acidophilus raspberry.