Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Language Reference : Functions : Returning values

Returning values

Values are returned by using the optional return statement. Any type may be returned, including lists and objects. This causes the function to end its execution immediately and pass control back to the line from which it was called. See return() for more information.

Example 8.11. Use of return()

<?php
function square($num)
{
   return
$num * $num;
}
echo
square(4);   // outputs '16'.
?>


You can't return multiple values from a function, but similar results can be obtained by returning a list.

Example 8.12. Returning an array to get multiple values

<?php
function small_numbers()
{
   return array (
0, 1, 2);
}
list (
$zero, $one, $two) = small_numbers();
?>


To return a reference from a function, you have to use the reference operator & in both the function declaration and when assigning the returned value to a variable:

Example 8.13. Returning a reference from a function

<?php
function &returns_reference()
{
   return
$someref;
}

$newref =& returns_reference();
?>


For more information on references, please check out References Explained.

Code Examples / Notes » functions.returning_values

trevor blackbird > yurab.com

You can also use the compact-extract pair to return multiple values:
<?php
function Composite($x, $y) {
$sum = $x + $y;
$dif = $x - $y;
return compact('sum', 'dif');
}
extract(Composite(3, 4));
echo $sum;
echo $dif;
?>


php

PHP functions that do not explicitly return a value will be 'void', that is, they return 'null'. C programmers will be accustomed to this already, but folks coming from Perl may expect the return value of a function to be the return value of the last expression evaluated inside the function, as is the case with Perl. Not so.

destes

One thing to note about returning arrays- the usual "complex variable" syntax will give you a parse error.  For instance, if you have:
function adminstuff() {
   mysql_connect('localhost', 'user', 'pass');
   mysql_select_db('mydb');
   $result = mysql_query('SELECT login, pass FROM users);
   $resultrow = mysql_fetch_array( $result );
   # this next line is key:
   return array ({$resultrow['login']}, {$resultrow['pass']});
}
That won't work.  You *can* reference array elements without the curly-braces syntax, i.e.:
return array ($resultrow['login'], $resultrow['pass']);
But you'll get a parse error if you try to use curly braces.  Thanks,
Steve


webmaster

mmamedov ::> pub [at] turkmenweb d0t c0m
im not sure if what you are doing is right...try this:
<?php
function isValid($vartocheck)
{
  if($vartocheck == true)
  {
     return 1;
  }
  else
  {
     return 0;
  }
}
?>
Then in your code:
<?php
$var = isValid($var1=$var2)
if($var == 0)
{
  // Show Error
}
else if($var == 1)
{
  // Show success
}
?>


mmamedov ::> pub

It took my some 30 minutes to figure out this strange thing that I happened to have, wasn't aware of this before. Posting here so that it might help for some of you as well..
Let say you have a function that returns a 0 or 1:
function isValid(){
    if(true)
      return 1;
    else
       return 0;
}
In your code you should call this as:
if (someFunction == '0') { //mind quotes!
  // do something
}
it is very strange, but it didn't work for me when I tried ==0, and even when I tried if (!someFunction) .... I even tried to have my function  return booleans as in 'return false' and return 'true'.
I have PHP 4.4.6, 1.3.37 (Unix)
PS: don't know whether it is a bug, or normal behavior :/
Peace.
@mm


louisgreen

It seems that when you wish to export a varible, you can do it as return $varible, return an array(), or globalise it. If you return something, information for that varible can only travel one way when the script is running, and that is out of the function.
function fn() {
  $varible = "something";
 return $varible;
}
echo fn();
OR
$newvarible = fn();
Although if global was used, it creates a pointer to a varible, whether it existed or not, and makes whatever is created in the function linked to that global pointer. So if the pointer was global $varible, and then you set a value to $varible, it would then be accessible in the global scope. But then what if you later on in the script redefine that global to equal something else. This means that whatever is put into the global array, the information that is set in the pointer, can be set at any point (overiden). Here is an example that might make this a little clearer:
function fn1() {
  global $varible; // Pointer to the global array
  $varible = "something";
}
fn1();
echo $varible; // Prints something
$varible = "12345";
echo $varible; // Prints 12345
function fn2() {
  global $varible; // Pointer to the global array
  echo $varible;
}
fn2(); // echos $varible which contains "12345"
Basically with the global array, you can set it refer to something already defined or set it to something, (a pointer) such as varible you plan to create in the function, and later possibly over ride the pointer with something else.


ian

In reference to the poster above, an additional (better?) way to return multiple values from a function is to use list(). For example:
function fn($a, $b)
{
  # complex stuff
  return array(
     $a * $b,
     $a + $b,
  );
}
list($product, $sum) = fn(3, 4);
echo $product; # prints 12
echo $sum; # prints 7


rusty

Here's a sick idea.  When a function returns no value, if you assign its return value to a variable that variable will be unset.  So instead of returning -1 on error just return with no value.
For example,
function myfunc($myvar) {
 if ($myvar == "abc")
   return(1);
 if ($myvar == "xyz")
   return(2);
 return;
}
$abc = myfunc("def");
if (isset($abc))
  echo("a-ok");
else
 echo("oops");


nick

Functions which return references, may return a NULL value. This is inconsistent with the fact that function parameters passed by reference can't be passed as NULL (or in fact anything which isnt a variable).
i.e.
<?php
function &testRet()
{
return NULL;
}
if (testRet() === NULL)
{
echo "NULL";
}
?>
parses fine and echoes NULL


devinemke

A function can only return one value, but that value can be an array or other compound value.  If you want to just define several variables into the global scope within your function you can do two things:
1. return an array from your function and then run the extract() function
$result_array = test ();
extract ($result_array);
2. Or you can just append the variables to the $GLOBALS array:
$array = array ('first' => 'john', 'middle' => 'q', 'last' => 'public');
function upper_case () {
global $array;
foreach ($array as $key => $value)
{
$GLOBALS[$key] = strtoupper ($value);
}
}
upper_case ();
echo "$first $middle $last";
// returns JOHN Q PUBLIC
In this second example you can create multiple values without necessarily returning anything from the function.  This may be handy for applying several functions (stripslashes, trim, etc..) accross all elements of $_POST or $_GET and then having all of the newly cleaned up variables extracted out for you.


Change Language


Follow Navioo On Twitter
User-defined functions
Function arguments
Returning values
Variable functions
Internal (built-in) functions
eXTReMe Tracker