PHP Doku:: Rückgabewerte - functions.returning-values.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchSprachreferenzFunktionenRückgabewerte

Ein Service von Reinhard Neidl - Webprogrammierung.

Funktionen

<<Funktionsparameter

Variablenfunktionen>>

Rückgabewerte

Sie können Werte mit dem optionalen Befehl "return" zurückgeben. Es können Variablen jeden Typs zurückgegeben werden, auch Arrays oder Objekte. Dies beendet sofort die Funktion und die Kontrolle wird wieder an die aufrufende Zeile zurückgegeben. Weitere Informationen finden Sie unter return().

Beispiel #1 Einsatz von return()

<?php
function quadrat ($zahl)
{
    return 
$zahl $zahl;
}
echo 
quadrat (4);   // gibt '16' aus.

?>

Es ist nicht möglich, mehrere Werte von einer Funktion zurückzugeben. Ein ähnliches Resultat kann man aber durch die Rückgabe von Arrays erreichen.

Beispiel #2 Rückgabe mehrere Werte in Arrays

<?php
function kleine_zahlen()
{
   return array (
012);
}
list (
$null$eins$zwei) = kleine_zahlen();
?>

Um von einer Funktion eine Referenz zurückzugeben, müssen Sie den Referenz-Operator & sowohl in der Funktionsdeklaration, als auch bei der Zuweisung des zurückgegebenen Wertes verwenden:

Beispiel #3 Rückgabe von Referenzen

<?php
function &returniere_referenz()
{
    return 
$einereferenz;
}

$neuereferenz =& returniere_referenz();
?>

Weitere Informationen über Referenzen finden Sie im Kapitel Referenzen in PHP.


11 BenutzerBeiträge:
- Beiträge aktualisieren...
rstaveley at seseit dot com
29.08.2010 22:26
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";
Anonymous
10.07.2010 4:54
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.
bgalloway at citycarshare dot org
28.03.2008 3:27
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.
Trevor Blackbird > yurab.com
19.04.2006 1:36
You can also use the compact-extract pair to return multiple values:

<?php

function Composite($x, $y) {
   
$sum = $x + $y;
   
$dif = $x - $y;
    return
compact('sum', 'dif');
}

extract(Composite(3, 4));
echo
$sum;
echo
$dif;

?>
nick at itomic.com
4.08.2003 9:56
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
rusty at socrates dot berkeley dot edu
17.07.2003 23:48
Here's a sick idea.  When a function returns no value, if you assign its return value to a variable that variable will be unset.  So instead of returning -1 on error just return with no value.

For example,

function myfunc($myvar) {
  if ($myvar == "abc")
    return(1);

  if ($myvar == "xyz")
    return(2);

  return;
}

$abc = myfunc("def");

if (isset($abc))
   echo("a-ok");
else
  echo("oops");
LouisGreen at pljg dot freeserve dot co dot uk
25.03.2003 19:13
It seems that when you wish to export a varible, you can do it as return $varible, return an array(), or globalise it. If you return something, information for that varible can only travel one way when the script is running, and that is out of the function.

function fn() {
   $varible = "something";

  return $varible;
}

echo fn();
OR
$newvarible = fn();

Although if global was used, it creates a pointer to a varible, whether it existed or not, and makes whatever is created in the function linked to that global pointer. So if the pointer was global $varible, and then you set a value to $varible, it would then be accessible in the global scope. But then what if you later on in the script redefine that global to equal something else. This means that whatever is put into the global array, the information that is set in the pointer, can be set at any point (overiden). Here is an example that might make this a little clearer:

function fn1() {

   global $varible; // Pointer to the global array
   $varible = "something";
}

fn1();
echo $varible; // Prints something
$varible = "12345";
echo $varible; // Prints 12345

function fn2() {

   global $varible; // Pointer to the global array
   echo $varible;
}

fn2(); // echos $varible which contains "12345"

Basically with the global array, you can set it refer to something already defined or set it to something, (a pointer) such as varible you plan to create in the function, and later possibly over ride the pointer with something else.
ian at NO_SPAM dot verteron dot net
15.01.2003 13:28
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
devinemke at yahoo dot com
26.06.2002 20:45
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.
destes at ix dot netcom dot com dot nospam
3.03.2002 21:35
One thing to note about returning arrays- the usual "complex variable" syntax will give you a parse error.  For instance, if you have:

function adminstuff() {
    mysql_connect('localhost', 'user', 'pass');
    mysql_select_db('mydb');
    $result = mysql_query('SELECT login, pass FROM users);
    $resultrow = mysql_fetch_array( $result );

    # this next line is key:
    return array ({$resultrow['login']}, {$resultrow['pass']});
}

That won't work.  You *can* reference array elements without the curly-braces syntax, i.e.:

return array ($resultrow['login'], $resultrow['pass']);

But you'll get a parse error if you try to use curly braces.  Thanks,

Steve
php at control-escape dot com
25.04.2001 21:26
PHP functions that do not explicitly return a value will be 'void', that is, they return 'null'. C programmers will be accustomed to this already, but folks coming from Perl may expect the return value of a function to be the return value of the last expression evaluated inside the function, as is the case with Perl. Not so.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)