2010-09-28 20 views
25

से 2 मूल्यों रिटर्निंग जब एक समारोह उत्पादन मूल्यों, उदाहरण के लिए, मैं इस के लिए होता है कि बुला दो मानों वापस जाने के लिए क्या यह संभव है:एक समारोह

<?php 

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

    return $uid; 
    return $sid;  
} 

echo ids(); 

?> 

कौन सा उत्पादन 1, मैं क्या चुना है चाहता हूँ आउटपुट के लिए, उदाहरण के लिए ids($sid), लेकिन यह अभी भी 1 आउटपुट करेगा।

क्या यह भी संभव है?

उत्तर

55

आप केवल एक मूल्य वापस कर सकते हैं।

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

:

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

तुम भी एक साहचर्य सरणी इस्तेमाल कर सकते हैं:

return array($uid, $sid); 

तो फिर तुम जैसे मानों तक पहुंच: जो अपने आप अन्य दो मान हैं लेकिन आप एक array उपयोग कर सकते हैं और इसे एक्सेस करना:

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

वह 'ऐरे' – MacMac

+2

@YouBook आउटपुट करेगा: आपको यो रास्ता बदलने की जरूरत है आप रिटर्न वैल्यू को भी संसाधित करते हैं। – Gumbo

+1

आह, मेरी गलती ने आपके संपादन नहीं पढ़े। वैसे भी, महान जवाब। :) * तब तक प्रतीक्षा करता है जब तक मैं इसे स्वीकार नहीं कर सकता * – 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

यदि आपको एकाधिक मान वापस करने की आवश्यकता है तो एक सरणी या ऑब्जेक्ट लौटाएं।

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

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

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

+1, अर्थात् अर्थ जोड़ना। हालांकि, समय-महत्वपूर्ण परिस्थितियों में, सरणी थोड़ा तेज़ हो सकती है (अगर संदेह में, बेंचमार्क बस सुनिश्चित हो)। – Archimedix

10

आप एक सरणी और सूची समारोह का उपयोग कर सकते जानकारी आसानी से प्राप्त करने के लिए:

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

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

मुझे आशा है कि यह तुम्हारी मदद करेगा

जेरोम

+0

यह स्वीकार्य उत्तर होना चाहिए क्योंकि यहां आप कई चर लौटाते हैं और आप सीधे सरणी के बिना "एक्सेस" किए बिना उन्हें एक्सेस कर सकते हैं। – Sw0ut

4

कई संभावनाओं उदाहरण के लिए:

// 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

मुझे लगता है कि संदर्भ द्वारा बेहतर असाइन करें ... लेकिन यह खतरे हो सकता है! –

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

और फिर

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

extract की तरह इसे उपयोग uid और सिड चर कर देगा। तो फिर आप $ uid और $ sid का उपयोग कर सकते हैं।

+0

यह एक और विकल्प है। – user2029015

2

संदर्भ द्वारा पास एक समाधान होगा। यह आपको रास्ता:

  • वापसी एक मूल्य आप सामान्य रूप से

  • और (एक समारोह के लिए संदर्भ द्वारा पारित)

एक उदाहरण के रूप में संशोधित करेगा दूसरा:

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 
संबंधित मुद्दे