返回值

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

Note:

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

return 的使用

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();
?>

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

返回值类型声明

PHP 7 增加了对返回值类型声明的支持。 就如 类型声明 一样, 返回值类型声明将指定该函数返回值的类型。同样,返回值类型声明也与 有效类型 中可用的参数类型声明一致。

严格类型声明 也会影响返回值类型声明。在默认情况下,如果返回值与返回值的类型不一致,则会被强制转换为返回值声明的类型,在强制转换失败的情况下才会抛出 TypeError 异常(例如:函数预期返回 array 实际返回 int 的情况,无法强制转换)。而在严格类型声明模式中,返回值的类型必须与预期一致,否则将会直接抛出 TypeError 异常。

从 PHP 7.1.0 开始,不指定类型的返回语句会导致一个 E_COMPILE_ERROR 错误,除非指定了返回类型为 void,在此情况下,带有指定类型的返回会触发此错误。

从 7.1.0 开始,返回值可以通过在类型前添加问号 (?) 来标记为允许返回空值。这表示该函数将返回指定类型或 NULL

Note:

当覆盖一个父类方法时,子类方法的返回值类型声明必须与父类一致。如果父类方法没有定义返回类型,那么子类方法可以定义任意的返回值类型声明。

范例

Example #4 基础返回值类型声明

<?php
function sum($a$b): float {
    return 
$a $b;
}

// Note that a float will be returned.
var_dump(sum(12));
?>

以上例程会输出:

float(3)

Example #5 严格模式下执行

<?php
declare(strict_types=1);

function 
sum($a$b): int {
    return 
$a $b;
}

var_dump(sum(12));
var_dump(sum(12.5));
?>

以上例程会输出:

int(3)

Fatal error: Uncaught TypeError: Return value of sum() must be of the type integer, float returned in - on line 5 in -:5
Stack trace:
#0 -(9): sum(1, 2.5)
#1 {main}
  thrown in - on line 5

Example #6 返回一个对象

<?php
class {}

function 
getC(): {
    return new 
C;
}

var_dump(getC());
?>

以上例程会输出:

object(C)#1 (0) {
}

Example #7 指定可选返回空值 (PHP 7.1.0 起可用)

<?php
function get_item(): ?string {
    if (isset(
$_GET['item'])) {
        return 
$_GET['item'];
    } else {
        return 
null;
    }
}
?>