文字

返回值

值通过使用可选的返回语句返回。可以返回包括数组和对象的任意类型。返回语句会立即中止函数的运行,并且将控制权交回调用该函数的代码行。更多信息见 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 (
0 1 2 );
}
list (
$zero $one $two ) =  small_numbers ();
?>

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

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

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

$newref  =&  returns_reference ();
?>

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

Return type declarations

PHP 7 adds support for return type declarations. Similarly to argument type declarations, return type declarations specify the type of the value that will be returned from a function. The same types are available for return type declarations as are available for argument type declarations.

Strict typing also has an effect on return type declarations. In the default weak mode, returned values will be coerced to the correct type if they are not already of that type. In strong mode, the returned value must be of the correct type, otherwise a TypeError will be thrown.

Note:

When overriding a parent method, the child's method must match any return type declaration on the parent. If the parent doesn't define a return type, then the child method may do so.

范例

Example #4 Basic return type declaration

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

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

以上例程会输出:

float(3)

Example #5 Strict mode in action

<?php
declare( 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
Stack trace:
#0 -(9): sum(1, 2.5)
#1 {main}
  thrown in - on line 5

Example #6 Returning an object

<?php
class  {}

function 
getC ():  {
    return new 
C ;
}

var_dump ( getC ());
?>

以上例程会输出:

object(C)#1 (0) {
}

用户评论:

[#1] ryan dot jentzsch at gmail dot com [2015-08-30 06:12:49]

PHP 7 return types if specified can not return a null.
For example:
<?php
declare(strict_types=1);

function add2ints(int $x, int $y):int
{
$z = $x + $y;
if ($z===0)
{
return null;
}
return $z;
}
$a = add2ints(3, 4);
echo is_null($a) ? 'Null' : $a;
$b = add2ints(-2, 2);
echo is_null($b) ? 'Null' : $b;
exit();

Output:
7
Process finished with exit code 139

[#2] ahmad at myandmyhost dot comze dot com [2014-02-15 04:28:59]

we can return array using foreach
<?php
function my_func2()
{
    return array(
"Name"=>"Ahmad Sayeed","Email"=>"ahmad@gmail.com");
    
}
$ar my_func2();
foreach(
$ar as $key=>$value)
{echo 
$key." , ".$value,"<br />";}

?>

[#3] 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->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";

[#4] 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.

[#5] 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.

[#6] 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

[#7] 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

上一篇: 下一篇: