PHP 5.4.37 Released

Zwracanie wartości

Wartości zwracane są przy użyciu opcjonalnego wyrażenia return. Wszystkie typy mogą być zwracane, łącznie z tablicami i obiektami. Powoduje to natychmiastowe zakończenie wykonywania funkcji i wznowienie wykonywania skryptu od linijki w której funkcja została wywołana. Zobacz return aby uzyskać więcej informacji.

Przykład #1 Użycie return

<?php
function square($num)
{
    return 
$num $num;
}
echo 
square(4);   // wypisuje '16'.
?>

Funkcjia nie może zwracać wielu wartości, ale podobny efekt może zostać osiągnięty poprzez zwracanie tablicy.

Przykład #2 Zwracanie tablicy

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

Aby zwrócić referencję, użyj operatora & zarówno w deklaracji funkcji jak i podczas przypisywania zwracanej wartości zmiennej:

Przykład #3 Zwracanie referencji

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

$newref =& returns_reference();
?>

Aby uzyskać więcej informacji o referencjach, przejdź do Wyjaśnienie Referencji.

add a note add a note

User Contributed Notes 7 notes

up
11
rstaveley at seseit dot com
4 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";
up
10
bgalloway at citycarshare dot org
6 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.
up
2
nick at itomic.com
11 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
up
0
meeme9 at gmail dot com
4 days ago
ref: 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.

although php pass array just like scalars. but seems php create a new array and copy the element in it to new array. it copy scalars like scalars but copy object as reference.

<?php

class Object {
    public
$x;
}
function
array_inc_x($array) {
   
$array{'x'}->x++;
    return
$array;
}

$array = array();
$array['x'] = new Object();
$array['x']->x = 1;

$array2 = array_inc_x($array);
array_inc_x($array2);

# it would print 3, 3 here.
print $array['x']->x . ', ' . $array2['x']->x . "\n";

?>
up
-1
Anonymous
4 years ago
As of at least PHP 5.3, a function or class method returning an object acts like an object.

<?php

class A {
    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.
up
-1
ian at NO_SPAM dot verteron dot net
12 years ago
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
up
-16
ahmad at myandmyhost dot comze dot com
11 months ago
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 />";}

?>
To Top