Возврат значений

Значения возвращаются при помощи необязательного оператора возврата. Возвращаемые значения могут быть любого типа, в том числе это могут быть массивы и объекты. Возврат приводит к завершению выполнения функции и передаче управления обратно к той строке кода, в которой данная функция была вызвана. Для получения более детальной информации ознакомьтесь с описанием return.

Замечание:

Если конструкция return не указана, то функция вернет значение NULL.

Пример #1 Использование конструкции return

<?php
function square($num)
{
    return 
$num $num;
}
echo 
square(4);   // выводит '16'.
?>

Функция не может возвращать несколько значений, но аналогичного результата можно добиться, возвращая массив.

Пример #2 Возврат нескольких значений в виде массива

<?php
function small_numbers()
{
    return array (
012);
}
list (
$zero$one$two) = small_numbers();
?>

Для того, чтобы функция возвращала результат по ссылке, вам необходимо использовать оператор & и при описании функции, и при присвоении переменной возвращаемого значения:

Пример #3 Возврат результата по ссылке

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

$newref =& returns_reference();
?>

Для получения более детальной информации о ссылках обратитесь к разделу документации Подробно о ссылках.

Коментарии

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
2003-01-15 06:28:35
http://php5.kiev.ua/manual/ru/functions.returning-values.html
Автор:
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
2003-08-04 03:56:43
http://php5.kiev.ua/manual/ru/functions.returning-values.html
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.
2008-03-27 20:27:13
http://php5.kiev.ua/manual/ru/functions.returning-values.html
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->1;

$obj2 obj_inc_x($obj);
obj_inc_x($obj2);

print 
$obj->', ' $obj2->"\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";
2010-08-29 16:26:43
http://php5.kiev.ua/manual/ru/functions.returning-values.html
PHP 7 return types if specified can not return a null.
For example:
<?php
declare(strict_types=1);

function 
add2ints(int $xint $y):int
{
   
$z $x $y;
    if (
$z===0)
    {
        return 
null;
    }
    return 
$z;
}
$a add2ints(34);
echo 
is_null($a) ? 'Null' $a;
$b add2ints(-22);
echo 
is_null($b) ? 'Null' $b;
exit();

Output:
7
Process finished with 
exit code 139
2015-08-30 09:12:49
http://php5.kiev.ua/manual/ru/functions.returning-values.html
Автор:
Just a quick clarification on whether variables are passed by reference or not. Variables are always passed using a pointer, and if the variable is modified, it is copied and re-assigned. For example:

<?php

function byPointer($x) {
    return 
$x 3// Does not modify or create a copy of $x
}

function 
copied($x) {
   
$x++; // At this point, creates a copy of $x to be used in local scope
   
return $x;
}

class 
Obj {
    public function 
performAction() {}
    public 
$y;
}

function 
objPointer(Obj $x) {
   
$x->performAction(); //works on $x
   
$x->'150'//works on $x
   
$x = new Obj(); // Does not modify $x outside of function
   
$x->'250';
}

function 
objReference(Obj &$x) {
   
$x->performAction(); //works on $x
   
$x->'150'//works on $x
   
$x = new Obj(); // Modifies original $x outside of function
   
$x->'250';
}

$x = new Obj();
$x->'10';

objPointer($x);

echo 
"Post Pointer: {$x->y}\n";

$x->'10';
objReference($x);

echo 
"Post Reference: {$x->y}\n";

?>

This will output:
Post Pointer: 150
Post Reference: 250

So make sure when writing functions that if you want to pass by reference you actually mean by reference, and not using standard PHP pointers
2015-12-03 11:17:48
http://php5.kiev.ua/manual/ru/functions.returning-values.html
Note: the function does not have "alternative syntax" as if/endif, while/endwhile, and colon (:) here is used to define returning type and not to mark where the block statement begins.
2016-04-17 13:58:47
http://php5.kiev.ua/manual/ru/functions.returning-values.html
Автор:
I like this method of concatinating methods by returning $this. It makes my code more readable. If the returned value is not an object it will fail and you find mistakes easier.

<?php
class Dummy {

    private 
$result;

    function 
__construct()
    {
       
$this->result =
           
$this
               
->setStuff('abc')
                ->
generateResult()
            ;
    }
   
    function 
setStuff($value)
    {
       
// do something
       
return $this;
    }

    function 
generateResult()
    {
        return [
'the result'];
    }

    function 
getResult()
    {
        return 
$this->result;
    }

}
?>
2016-11-22 16:20:08
http://php5.kiev.ua/manual/ru/functions.returning-values.html
Автор:
With 7.1, these are possible yet;

<?php
function ret_void(): void {
   
// do something but no return any value
    // if needs to break fn exec for any reason simply write return;
   
if (...) {
        return; 
// break
        // return null; // even this NO!
   
}

   
$db->doSomething();
   
// no need return call anymore 
}

function 
ret_nullable() ?int {
    if (...) {
        return 
123;
    } else {
        return 
null// MUST!
   
}
}
?>
2016-12-20 00:50:53
http://php5.kiev.ua/manual/ru/functions.returning-values.html
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 $fileNamestring $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.
2017-01-02 20:40:29
http://php5.kiev.ua/manual/ru/functions.returning-values.html
Автор:
If a function/method parameter has a type declaration , then php compiler will check it the moment of invocation regardless if strict_types is set to 1 or 0 or not set at all.

However, php will check parameters types on build in php functions when  strict_types is set to 1;
2017-10-12 22:30:27
http://php5.kiev.ua/manual/ru/functions.returning-values.html

    Поддержать сайт на родительском проекте КГБ