函数
在线手册:中文  英文

返回值

值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。更多信息见 return

Note:

如果省略了 return,则返回值为 NULL

Example #1 return 的使用

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

函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。

Example #2 返回一个数组以得到多个返回值

<?php
function small_numbers()
{
    return array (
012);
}
list (
$zero$one$two) = small_numbers();
?>

从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符 &:

Example #3 从函数返回一个引用

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

$newref =& returns_reference();
?>

有关引用的更多信息, 请查看引用的解释


函数
在线手册:中文  英文

用户评论:

rstaveley at seseit dot com (2010-08-29 13:26:43)

Developers with a C background may expect pass by reference semantics for arrays. It may be surprising that  pass by value is used for arrays just like scalars. Objects are implicitly passed by reference.

<?php

# (1) Objects are always passed by reference and returned by reference

class Obj {
    public 
$x;
}

function 
obj_inc_x($obj) {
    
$obj->x++;
    return 
$obj;
}

$obj = new Obj();
$obj->1;

$obj2 obj_inc_x($obj);
obj_inc_x($obj2);

print 
$obj->', ' $obj2->"\n";

# (2) Scalars are not passed by reference or returned as such

function scalar_inc_x($x) {
    
$x++;
    return 
$x;
}

$x 1;

$x2 scalar_inc_x($x);
scalar_inc_x($x2);

print 
$x ', ' $x2 "\n";

# (3) You have to force pass by reference and return by reference on scalars

function &scalar_ref_inc_x(&$x) {
    
$x++;
    return 
$x;
}

$x 1;

$x2 =& scalar_ref_inc_x($x);    # Need reference here as well as the function sig
scalar_ref_inc_x($x2);

print 
$x ', ' $x2 "\n";

# (4) Arrays use pass by value sematics just like scalars

function array_inc_x($array) {
    
$array{'x'}++;
    return 
$array;
}

$array = array();
$array['x'] = 1;

$array2 array_inc_x($array);
array_inc_x($array2);

print 
$array['x'] . ', ' $array2['x'] . "\n";

# (5) You have to force pass by reference and return by reference on arrays

function &array_ref_inc_x(&$array) {
    
$array{'x'}++;
    return 
$array;
}

$array = array();
$array['x'] = 1;

$array2 =& array_ref_inc_x($array); # Need reference here as well as the function sig
array_ref_inc_x($array2);

print 
$array['x'] . ', ' $array2['x'] . "\n";

Anonymous (2010-07-09 19:54:02)

As of at least PHP 5.3, a function or class method returning an object acts like an object.

<?php

class {
    function 
test() {
        echo 
"Yay!";
        }
    }

function 
get_obj() {
    return new 
A();
    }

get_obj()->test();  // "Yay!"

?>

Sorry, still doesn't work with arrays.  Ie <?php echo get_array()[1]; ?> fails.

bgalloway at citycarshare dot org (2008-03-27 18:27:13)

Be careful about using "do this thing or die()" logic in your return lines.  It doesn't work as you'd expect:

<?php
function myfunc1() {
    return(
'thingy' or die('otherthingy'));
}
function 
myfunc2() {
    return 
'thingy' or die('otherthingy');
}
function 
myfunc3() {
    return(
'thingy') or die('otherthingy');
}
function 
myfunc4() {
    return 
'thingy' or 'otherthingy';
}
function 
myfunc5() {
    
$x 'thingy' or 'otherthingy'; return $x;
}
echo 
myfunc1(). "\n"myfunc2(). "\n"myfunc3(). "\n"myfunc4(). "\n"myfunc5(). "\n";
?>

Only myfunc5() returns 'thingy' - the rest return 1.

nick at itomic.com (2003-08-04 00:56:43)

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

ian at NO_SPAM dot verteron dot net (2003-01-15 04:28:35)

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

devinemke at yahoo dot com (2002-06-26 11:45:45)

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.

易百教程