返回值
值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。更多信息见 return。
注意:
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 notes
ryan dot jentzsch at gmail dot com ¶
8 years ago
PHP 7.1 allows for void and null return types by preceding the type declaration with a ? -- (e.g. function canReturnNullorString(): ?string)
However resource is not allowed as a return type:
<?php
function 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.
rstaveley at seseit dot com ¶
14 years ago
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->x = 1;
$obj2 = obj_inc_x($obj);
obj_inc_x($obj2);
print $obj->x . ', ' . $obj2->x . "\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";
bgalloway at citycarshare dot org ¶
16 years ago
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 ¶
21 years ago
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
备份地址:http://www.lvesu.com/blog/php/functions.returning-values.php