函数的返回值通过使用可选的返回语句(return
)返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行
return 返回语句的使用
- 函数中
return
语句是可选的,如果省略了 return,则返回值为 NULL。 return
可以返回包括数组和对象的任意类型return
会立即中止函数的运行,并且将控制权交回调用该函数的代码行
1 | function square($num) |
以数组形式得到多个返回值
- 函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。
- 同时配合使用
list
使获取函数多个返回值的代码更加优雅:1
2
3
4
5function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
函数返回一个引用
- 函数可以返回一个引用
- 从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符
&
:1
2
3
4
5
6function &returns_reference()
{
return $someref;
}
$newref =& returns_reference();
返回值类型声明
- PHP 7 增加了对返回值类型声明的支持
1
2
3
4
5
6function sum($a, $b): float {
return $a + $b;
}
// Note that a float will be returned.
var_dump(sum(1, 2)); - 返回值类型声明将指定该函数返回值的类型
1
2
3
4
5
6
7
8
9
10
11class C {}
function getC(): C {
return new C;
}
var_dump(getC());
/*
输出:
object(C)#1 (0) {
}
*/ - 严格类型 也会影响返回值类型声明
- 在默认的弱模式中,如果返回值与返回值的类型不一致,则会被强制转换为返回值声明的类型
- 在强模式中,返回值的类型必须正确,否则将会抛出一个TypeError异常.
1
2
3
4
5
6
7
8
9
10
11
12
13declare(strict_types=1);
function sum($a, $b): int {
return $a + $b;
}
var_dump(sum(1, 2));
var_dump(sum(1, 2.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
*/
- 子类方法覆盖父类方法时
- 如果父类方法有定义返回类型,子类方法的返回值类型声明必须与父类一致
- 如果父类方法没有定义返回类型,那么子类方法可以定义任意的返回值类型声明。
- 当返回值类型声明之前有
?
时,表示允许函数返回null1
2
3
4
5
6
7
8
9
10
11
12function canReturnNullorString(): string
{
return null;
}
var_dump(canReturnNullorString()); // PHP Fatal error: Uncaught TypeError: Return value of canReturnNullorString() must be of the type string, null returned in ....
// ------------
function canReturnNullorString(): ?string
{
return null;
}
var_dump(canReturnNullorString()); // NULL - 资源不允许作为返回类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14function fileOpen(string $fileName, string $mode): resource
{
$handle = fopen($fileName, $mode);
if ($handle !== false)
{
return $handle;
}
}
$resourceHandle = fileOpen("myfile.txt", "r");
/*
Errors with:
Fatal error: Uncaught TypeError: Return value of fileOpen() must be an instance of resource, resource returned.
*/