downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

توابع متغیر> <آرگومان‌های تابع
[edit] Last updated: Fri, 24 Jun 2011

view this page in

بازگرداندن مقادیر

مقادیر با استفاده از جمله اختیاری return بازگردانده می‌شود. هر نوعی قابل بازگردانده شدن است که شامل آرایه‌ها و اشیا نیز است. این باعث می‌شود تابع اجرای خود را بلافاصله به پایان برده و کنترل را به خطی که از آن فراخوانده شده است بازگرداند. return() را برای اطلاعات بیشتر ببینید.

Note:

If the return() is omitted the value NULL will be returned.

Example #1 استفاده از return()

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

یک تابع نمیذتواند چندین مقدار بازگرداند اما نتایج مشابه را می‌توان از طریق آرایه بازپس فرستاد.

Example #2 بازگرداندن آرایه با چندین مقدار

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

برای بازگرداندن مرجع از یک تابع از عملگر مرجع & در تعریف تابع و زمان انتصاب مقدار بازگردانده شده به متغیر استفاده کنید:

Example #3 بازگرداندن مرجع از یک تابع

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

$newref =& returns_reference();
?>

برای اطلاعات بیشتر درباره مرجع مرجع توضیح داده شده را ببینید.



توابع متغیر> <آرگومان‌های تابع
[edit] Last updated: Fri, 24 Jun 2011
 
add a note add a note User Contributed Notes بازگرداندن مقادیر - [6 notes]
up
3
rstaveley at seseit dot com
2 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
2
ian at NO_SPAM dot verteron dot net
10 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
6
bgalloway at citycarshare dot org
5 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
4
nick at itomic.com
9 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
3
Anonymous
2 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
0
devinemke at yahoo dot com
10 years ago
A function can only return one value, but that value can be an array or other compound value.  If you want to just define several variables into the global scope within your function you can do two things:

1. return an array from your function and then run the extract() function

$result_array = test ();
extract ($result_array);

2. Or you can just append the variables to the $GLOBALS array:

$array = array ('first' => 'john', 'middle' => 'q', 'last' => 'public');
function upper_case () {
global $array;
foreach ($array as $key => $value)
{
$GLOBALS[$key] = strtoupper ($value);
}
}

upper_case ();
echo "$first $middle $last";
// returns JOHN Q PUBLIC

In this second example you can create multiple values without necessarily returning anything from the function.  This may be handy for applying several functions (stripslashes, trim, etc..) accross all elements of $_POST or $_GET and then having all of the newly cleaned up variables extracted out for you.

 
show source | credits | sitemap | contact | advertising | mirror sites