戻り値

オプションの return 文により値を返すことができます。 配列やオブジェクトを含むあらゆる型を返すことができます。 これにより、関数の実行を任意の箇所で終了し、その関数を呼び出した 箇所に制御を戻すことが出来ます。詳細に関しては 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();

// PHP 7.1.0 より前のバージョンで上と同じことをするには、
// 言語構造 list を使うしかありません。
list($zero, $one, $two) = small_numbers();

?>

関数からリファレンスを返すためには、 関数宣言と戻り値を代入する変数に対して、 リファレンス演算子 & を使います:

例3 関数からリファレンスを返す

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

$newref =& returns_reference();
?>

リファレンスに関する詳細は、リファレンスの説明 を参照ください。

add a note

User Contributed Notes 4 notes

up
21
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:<?phpfunction 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.
up
21
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 referenceclass 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 suchfunction 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 scalarsfunction &scalar_ref_inc_x(&$x) {    $x++;    return $x;}$x = 1;$x2 =& scalar_ref_inc_x($x);    # Need reference here as well as the function sigscalar_ref_inc_x($x2);print $x . ', ' . $x2 . "\n";# (4) Arrays use pass by value sematics just like scalarsfunction 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 arraysfunction &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 sigarray_ref_inc_x($array2);print $array['x'] . ', ' . $array2['x'] . "\n";
up
11
bgalloway at citycarshare dot org
17 years ago
Be careful about using "do this thing or die()" logic in your return lines.  It doesn't work as you'd expect:<?phpfunction 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.
up
9
nick at itomic.com
22 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.<?phpfunction &testRet(){    return NULL;}if (testRet() === NULL){    echo "NULL";}?>parses fine and echoes NULL
To Top