2010-09-28 11 views
25

Ist es möglich, zwei Werte zurück, wenn eine Funktion aufrufen, die die Werte, zum Beispiel ausgegeben würden, ich dieses:Zurück 2 Werte aus einer Funktion

<?php 

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

    return $uid; 
    return $sid;  
} 

echo ids(); 

?> 

Welche Ausgabe wird 1, ich will, was wählen ausgeben, z ids($sid), aber es wird immer noch ausgegeben 1.

Ist es überhaupt möglich?

Antwort

55

Sie können nur einen Wert zurückgeben. Aber Sie können eine array verwenden, dass sich die beiden anderen Werte enthält:

return array($uid, $sid); 

Dann greifen Sie auf die Werte wie:

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

Sie auch ein assoziatives Array verwenden:

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

Und Zugriff darauf:

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

Das würde 'Array' ausgeben – MacMac

+2

@YouBook: Sie müssen den Weg yo ändern Du verarbeitest auch den Rückgabewert. – Gumbo

+1

Ah, mein Fehler, habe deine Änderungen nicht gelesen. Wie auch immer, gute Antwort. :) * wartet, bis ich das annehmen kann * – MacMac

6
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 />'; 
15

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

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

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

Ich hoffe, dies wird Ihnen helfen,

+2

+1 für Hinweise auf Objekte als Alternative, semantische Bedeutung hinzufügen. In zeitkritischen Situationen können Arrays jedoch ein wenig schneller sein (im Zweifelsfall nur um sicher zu gehen). – Archimedix

10

Sie ein Array und die Liste Funktion die Informationen leicht verwenden können, erhalten:

// 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; 
+0

Dies sollte die akzeptierte Antwort sein, da hier mehrere Variablen zurückgegeben werden und Sie direkt darauf zugreifen können, ohne auf das Array zuzugreifen. – Sw0ut

4

Viele Möglichkeiten

Jerome:

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

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

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

denke ich besser per Referenz zuordnen ... aber das können Gefahren sein! –

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

und es dann wie

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

extract wird uid und sid variabel machen. Also können Sie $ uid und $ sid verwenden.

+0

Dies ist eine andere Alternative. – user2029015

2

Pass-by-Referenz wäre eine Lösung. Auf diese Weise können:

  • Rückkehr ein Wert wie gewohnt

  • und die zweite ändern (die durch refference weitergegeben ein auf die Funktion)

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 
Verwandte Themen