Rückgabe von zwei Werten aus einer Funktion [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
MacMac

Ist es möglich, zwei Werte zurückzugeben, wenn eine Funktion aufgerufen wird, die die Werte ausgeben würde?

Ich habe zum Beispiel das hier:

<?php
    function ids($uid = 0, $sid = '')
    {
        $uid = 1;
        $sid = md5(time());

        return $uid;
        return $sid;
    }

    echo ids();
?>

Was ausgegeben wird 1. Ich möchte auswählen, was ausgegeben werden soll, z ids($sid)aber es wird trotzdem ausgegeben 1.

Ist es überhaupt möglich?

  • Diese Seite sollte für PHP 7.1 aktualisiert werden, Destrukturierung (obwohl diese Frage mehrdeutig ist).

    – Peter Mortensen

    12. Dezember 2019 um 21:34 Uhr


Sie können nur einen Wert zurückgeben. Aber Sie können eine verwenden Reihe das selbst die anderen beiden Werte enthält:

return array($uid, $sid);

Dann greifen Sie auf die Werte zu wie:

$ids = ids();
echo $ids[0];  // uid
echo $ids[1];  // sid

Sie können auch ein assoziatives Array verwenden:

return array('uid' => $uid, 'sid' => $sid);

Und darauf zugreifen:

$ids = ids();
echo $ids['uid'];
echo $ids['sid'];

  • @YouBook: Sie müssen auch die Art und Weise ändern, wie Sie den Rückgabewert verarbeiten.

    – Gumbo

    28. September 2010 um 17:09 Uhr

  • Ah, mein Fehler, habe deine Änderungen nicht gelesen. Jedenfalls tolle Antwort. 🙂 wartet, bis ich das akzeptieren kann

    – MacMac

    28. September 2010 um 17:11 Uhr

  • @YouBook, check out list in meiner Antwort unten. Sehr praktische Funktion.

    – Webbiedave

    28. September 2010 um 17:13 Uhr

Geben Sie ein Array oder ein Objekt zurück, wenn Sie mehrere Werte zurückgeben müssen. Zum Beispiel:

function foo() {
    return array(3, 'joe');
}

$data = foo();
$id = $data[0];
$username = $data[1];

// or:
list($id, $username) = foo();

  • +1, um alternativ auf Objekte hinzuweisen und semantische Bedeutung hinzuzufügen. In zeitkritischen Situationen können Arrays jedoch etwas schneller sein (im Zweifelsfall Benchmarking durchführen, um sicherzugehen).

    – Bogen

    28. September 2010 um 17:17 Uhr


Sie können ein Array und die Listenfunktion verwenden, um die Informationen einfach zu erhalten:

function multi($a,$b) {
   return array($a,$b);
}

list($first,$second) = multi(1,2);

ich hoffe, dies wird dir helfen

Hieronymus

  • Dies sollte die akzeptierte Antwort sein, da Sie hier mehrere Variablen zurückgeben und direkt auf sie zugreifen können, ohne auf das Array “zugreifen” zu müssen.

    – Sw0ut

    20. Januar 2016 um 8:36 Uhr

function ids($uid = 0, $sid = '') 
{ 
    $uid = 1; 
    $sid = md5(time()); 

    return array('uid' => $uid,
                 'sid' => $sid
                );     
} 

$t = ids(); 
echo $t['uid'],'<br />';
echo $t['sid'],'<br />';

Viele Möglichkeiten:

// return array
function f() {
    return array($uid, $sid);
}
list($uid, $sid) = f();
$uid;
$sid;

// return object
function f() {
    $obj = new stdClass;
    $obj->uid = $uid;
    $obj->sid = $sid;
    return $obj;
}
$obj->uid;
$obj->sid;

// assign by reference
function f(&$uid, &$sid) {
    $uid = '...';
    $sid = '...';
}
f($uid, $sid);
$uid;
$sid;

  • Ich denke, besser per Referenz zuweisen … aber das kann Gefahren sein!

    – Felipe Cardoso Martins

    28. September 2010 um 17:39 Uhr

Benutzer-Avatar
Adrian Cumpanasu

Pass by Reference wäre eine Lösung. So können Sie:

  • einen Wert zurückgeben, wie Sie es normalerweise tun würden

  • und ändern Sie die zweite (die durch Referenz an die Funktion übergebene)

Ein Beispiel:

function foo(&$var) // notice the & in front of the parameter passed
{
    $var++;
    return 1;
}

$a=5;
echo foo($a);
// echoes 1, the returned value
echo $a;
// $a is now 6

  • Ich denke, besser per Referenz zuweisen … aber das kann Gefahren sein!

    – Felipe Cardoso Martins

    28. September 2010 um 17:39 Uhr

Benutzer-Avatar
Jens

return array('uid' => $uid, 'sid' => $sid);

und greife dann gerne darauf zu

$dinga = ids();
extract($dinga);

Extrakt macht uid und sid variabel. Dann können Sie $uid und $sid verwenden.

  • Dies ist eine weitere Alternative.

    – Benutzer2029015

    12. Juni 2013 um 11:59 Uhr

1215990cookie-checkRückgabe von zwei Werten aus einer Funktion [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy