返回值

使用可选的 return 语句返回 value。可以返回任何类型,包括数组和对象。这将导致函数立即结束执行并控制权返回到调用它的行。有关更多信息,请参阅 return

注意:

如果省略了 return,则将返回 null

使用 return

示例 #1 使用 return

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

函数不能返回多个值,但可以通过返回数组获得类似的结果。

示例 #2 返回数组以获取多个值

<?php
function small_numbers()
{
return [
0, 1, 2];
}
// 数组解构将分别收集数组的每个成员
[$zero, $one, $two] = small_numbers();

// 在 7.1.0 之前,唯一等效的替代方法是使用 list() 结构
list($zero, $one, $two) = small_numbers();

?>

要从函数返回引用,请在函数声明中以及将返回值分配给变量时都使用引用运算符 &

示例 #3 从函数返回引用

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

$newref =& returns_reference();
?>

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

添加备注

用户贡献的备注 4 个备注

rstaveley at seseit dot com
13 年前
具有 C 背景的开发人员可能期望对数组使用按引用传递语义。对于数组,使用按值传递,就像标量一样,这可能令人惊讶。对象隐式地按引用传递。

<?php

# (1) 对象始终按引用传递并按引用返回

class Obj {
public
$x;
}

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

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

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

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

# (2) 标量不按引用传递或按引用返回

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

$x = 1;

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

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

# (3) 您必须强制按引用传递并按引用返回标量

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

$x = 1;

$x2 =& scalar_ref_inc_x($x); # 需要引用,以及函数签名
scalar_ref_inc_x($x2);

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

# (4) 数组使用按值传递语义,就像标量一样

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) 您必须强制按引用传递并按引用返回数组

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

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

$array2 =& array_ref_inc_x($array); # 需要引用,以及函数签名
array_ref_inc_x($array2);

print
$array['x'] . ', ' . $array2['x'] . "\n";
ryan dot jentzsch at gmail dot com
7 年前
PHP 7.1 允许通过在类型声明前加一个 ? 来使用 void 和 null 返回类型 -- (例如,function canReturnNullorString(): ?string)

但是,resource 不允许作为返回类型

<?php
function fileOpen(string $fileName, string $mode): resource
{
$handle = fopen($fileName, $mode);
if (
$handle !== false)
{
return
$handle;
}
}

$resourceHandle = fileOpen("myfile.txt", "r");
?>

错误与
致命错误:未捕获的 TypeError:fileOpen() 的返回值必须是 resource 的实例,但返回了 resource。
bgalloway at citycarshare dot org
16 年前
小心在你的返回值中使用“执行此操作或死亡()”逻辑。它不会像你预期的那样工作。

<?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";
?>

只有 myfunc5() 返回 'thingy' - 其余返回 1。
nick at itomic.com
21 年前
返回引用的函数可能会返回 NULL 值。这与引用传递函数参数不能作为 NULL(或者实际上任何不是变量的东西)传递的事实不一致。

例如:

<?php

function &testRet()
{
return
NULL;
}

if (
testRet() === NULL)
{
echo
"NULL";
}
?>

解析良好并输出 NULL
To Top