क्या इस तरह से दो रिटर्न के साथ फ़ंक्शन करना संभव है:
function test($testvar)
{
// Do something
return $var1;
return $var2;
}
यदि हां, तो मैं प्रत्येक रिटर्न को अलग से कैसे प्राप्त कर पाऊंगा?
क्या इस तरह से दो रिटर्न के साथ फ़ंक्शन करना संभव है:
function test($testvar)
{
// Do something
return $var1;
return $var2;
}
यदि हां, तो मैं प्रत्येक रिटर्न को अलग से कैसे प्राप्त कर पाऊंगा?
जवाबों:
2 चर वापस करने का कोई तरीका नहीं है। यद्यपि, आप एक सरणी का प्रचार कर सकते हैं और इसे वापस कर सकते हैं; एक गतिशील चर, आदि को वापस करने के लिए एक सशर्त बनाएं।
उदाहरण के लिए, यह फ़ंक्शन वापस आएगा $var2
function wtf($blahblah = true) {
$var1 = "ONe";
$var2 = "tWo";
if($blahblah === true) {
return $var2;
}
return $var1;
}
आवेदन में:
echo wtf();
//would echo: tWo
echo wtf("not true, this is false");
//would echo: ONe
यदि आप उन दोनों को चाहते थे, तो आप फ़ंक्शन को थोड़ा संशोधित कर सकते हैं
function wtf($blahblah = true) {
$var1 = "ONe";
$var2 = "tWo";
if($blahblah === true) {
return $var2;
}
if($blahblah == "both") {
return array($var1, $var2);
}
return $var1;
}
echo wtf("both")[0]
//would echo: ONe
echo wtf("both")[1]
//would echo: tWo
list($first, $second) = wtf("both")
// value of $first would be $var1, value of $second would be $var2
wantarray()
तकनीकी रूप से, आप एक से अधिक मूल्य वापस नहीं कर सकते। हालाँकि, उस सीमा के आसपास काम करने के कई तरीके हैं। वह तरीका जो कई मानों को लौटाने की तरह काम करता है, वह listकीवर्ड के साथ है :
function getXYZ()
{
return array(4,5,6);
}
list($x,$y,$z) = getXYZ();
// Afterwards: $x == 4 && $y == 5 && $z == 6
// (This will hold for all samples unless otherwise noted)
तकनीकी रूप से, आप एक सरणी लौटा रहे हैं और listवास्तविक सरणी को संग्रहीत करने के बजाय उस सरणी के तत्वों को विभिन्न मूल्यों में संग्रहीत करने के लिए उपयोग कर रहे हैं। इस तकनीक का उपयोग करने से यह कई मूल्यों को वापस करने की तरह महसूस करेगा ।
listसमाधान एक नहीं बल्कि php-विशिष्ट एक है। इसी तरह की संरचनाओं के साथ कुछ भाषाएँ हैं, लेकिन अधिक भाषाएँ जो नहीं हैं। एक और तरीका है जो आमतौर पर कई मूल्यों को "वापस" करने के लिए उपयोग किया जाता है और यह बस हर भाषा (एक तरह से या किसी अन्य) के बारे में उपलब्ध है। हालाँकि, यह विधि काफी भिन्न दिखाई देगी, इसलिए कुछ को उपयोग करने की आवश्यकता हो सकती है।
// note that I named the arguments $a, $b and $c to show that
// they don't need to be named $x, $y and $z
function getXYZ(&$a, &$b, &$c)
{
$a = 4;
$b = 5;
$c = 6;
}
getXYZ($x, $y, $z);
इस तकनीक को भी कुछ कार्यों php से ही परिभाषित में प्रयोग किया जाता है (उदाहरण के लिए $countमें str_replace , $matchesमें preg_match )। यह कई मूल्यों को वापस करने से काफी अलग लग सकता है, लेकिन इसके बारे में कम से कम जानने योग्य है।
एक तीसरी विधि एक वस्तु का उपयोग करने के लिए आपके द्वारा आवश्यक विभिन्न मूल्यों को रखने के लिए है। यह अधिक टाइपिंग है, इसलिए इसे ऊपर के दो तरीकों के रूप में अक्सर उपयोग नहीं किया जाता है। इसका उपयोग करने के लिए समझ में आ सकता है, हालांकि, जब कई स्थानों में चर का एक ही सेट का उपयोग किया जाता है (या निश्चित रूप से, ऐसी भाषा में काम करना जो उपरोक्त विधियों का समर्थन नहीं करता है या आपको अतिरिक्त टाइपिंग के बिना ऐसा करने की अनुमति देता है)।
class MyXYZ
{
public $x;
public $y;
public $z;
}
function getXYZ()
{
$out = new MyXYZ();
$out->x = 4;
$out->y = 5;
$out->z = 6;
return $out;
}
$xyz = getXYZ();
$x = $xyz->x;
$y = $xyz->y;
$z = $xyz->z;
उपरोक्त विधियां एक फ़ंक्शन से कई मानों को वापस करने के मुख्य तरीकों का योग करती हैं। हालांकि, इन तरीकों पर विविधताएं हैं। देखने के लिए सबसे दिलचस्प विविधताएं, वे हैं जिनमें आप वास्तव में एक सरणी लौटा रहे हैं, बस क्योंकि वहाँ इतना है कि आप PHP में सरणियों के साथ कर सकते हैं।
सबसे पहले, हम केवल एक सरणी वापस कर सकते हैं और इसे कुछ भी नहीं बल्कि एक सरणी के रूप में मान सकते हैं:
function getXYZ()
{
return array(1,2,3);
}
$array = getXYZ();
$x = $array[1];
$y = $array[2];
$z = $array[3];
ऊपर दिए गए कोड के बारे में सबसे दिलचस्प हिस्सा यह है कि फ़ंक्शन के अंदर का कोड वही है जो मैंने पहले उदाहरण में दिया था; केवल फ़ंक्शन को कॉल करने वाला कोड बदल गया। इसका मतलब यह है कि यह फ़ंक्शन को कॉल करने वाले पर निर्भर करता है कि परिणाम कैसे लौटाता है।
वैकल्पिक रूप से, कोई एक सहयोगी सरणी का उपयोग कर सकता है:
function getXYZ()
{
return array('x' => 4,
'y' => 5,
'z' => 6);
}
$array = getXYZ();
$x = $array['x'];
$y = $array['y'];
$z = $array['z'];
Php में वह compactफ़ंक्शन होता है जो आपको उपरोक्त के समान करने की अनुमति देता है लेकिन कम कोड लिखते समय। (ठीक है, नमूने में कम कोड नहीं होगा, लेकिन एक वास्तविक विश्व अनुप्रयोग शायद होगा।) हालांकि, मुझे लगता है कि टाइपिंग बचत की मात्रा न्यूनतम है और यह कोड को पढ़ने के लिए कठिन बनाता है, इसलिए मैं इसे स्वयं नहीं करूंगा। फिर भी, यहाँ एक नमूना है:
function getXYZ()
{
$x = 4;
$y = 5;
$z = 6;
return compact('x', 'y', 'z');
}
$array = getXYZ();
$x = $array['x'];
$y = $array['y'];
$z = $array['z'];
यह ध्यान दिया जाना चाहिए कि जबकि compactएक समकक्ष में हैextract जिसका उपयोग यहां कॉलिंग कोड में किया जा सकता है, लेकिन चूंकि इसका उपयोग करने के लिए एक बुरा विचार है (विशेष रूप से सरल रूप में कुछ के लिए) मैं इसके लिए एक नमूना भी नहीं दूंगा। समस्या यह है कि यह "जादू" करेगा और आपके लिए चर बनाएगा, जबकि आप यह नहीं देख सकते हैं कि कोड के अन्य भागों में जाने के बिना कौन से चर बनाए जाते हैं।
अंत में, मैं उल्लेख करना चाहूंगा कि वास्तव में साहचर्य सरणी के साथ अच्छा listनहीं खेलता है। निम्नलिखित वही करेगा जो आप उम्मीद करते हैं:
function getXYZ()
{
return array('x' => 4,
'y' => 5,
'z' => 6);
}
$array = getXYZ();
list($x, $y, $z) = getXYZ();
हालाँकि, निम्नलिखित कुछ अलग करेगा:
function getXYZ()
{
return array('x' => 4,
'z' => 6,
'y' => 5);
}
$array = getXYZ();
list($x, $y, $z) = getXYZ();
// Pay attention: $y == 6 && $z == 5
यदि आपने listएक साहचर्य सरणी के साथ उपयोग किया है , और किसी और को भविष्य में तथाकथित फ़ंक्शन में कोड को बदलना होगा (जो किसी भी स्थिति के बारे में हो सकता है) तो यह अचानक टूट सकता है, इसलिए मैं listसाहचर्य सरणियों के साथ संयोजन के खिलाफ सिफारिश करूंगा ।
return array('x' => $x, 'y' => $y, 'z' => $z)क्लीनर मिल जाएगा , लेकिन उस बिंदु पर जहां मैं इसे खुद लिखूंगा, उस बिंदु पर नहीं जहां मैं दूसरों से उस प्रारूप का उपयोग करने के लिए कहूंगा।
आपके उदाहरण में, दूसरा रिटर्न कभी नहीं होगा - पहली वापसी है आखिरी चीज जो पीएचपी चलेगी। यदि आपको कई मान वापस करने हैं, तो एक सरणी लौटाएँ:
function test($testvar) {
return array($var1, $var2);
}
$result = test($testvar);
echo $result[0]; // $var1
echo $result[1]; // $var2
list($result_1, result_2) = test($testvar);
result_2या $result_2?
$result_2
PHP 7.1 के बाद से हमारे पास सूचियों के लिए उचित विनाशकारी है। जिससे आप इस तरह की चीजें कर सकते हैं:
$test = [1, 2, 3, 4];
[$a, $b, $c, $d] = $test;
echo($a);
> 1
echo($d);
> 4
एक समारोह में यह इस तरह दिखेगा:
function multiple_return() {
return ['this', 'is', 'a', 'test'];
}
[$first, $second, $third, $fourth] = multiple_return();
echo($first);
> this
echo($fourth);
> test
विनाशकारी एक बहुत शक्तिशाली उपकरण है। यह कुंजी => मूल्य जोड़े को नष्ट करने में सक्षम है:
["a" => $a, "b" => $b, "c" => $c] = ["a" => 1, "b" => 2, "c" => 3];
PHP 7.1 के लिए नए फ़ीचर पेज पर एक नज़र डालें:
मुझे पता है कि मैं बहुत देर हो चुकी हूं, लेकिन इस समस्या का एक अच्छा और सरल समाधान है।
एक बार विनाशकारी का उपयोग करके कई मूल्यों को वापस करना संभव है।
function test()
{
return [ 'model' => 'someValue' , 'data' => 'someothervalue'];
}
अब आप इस का उपयोग कर सकते हैं
$result = test();
extract($result);
extractसरणी में प्रत्येक सदस्य के लिए एक चर बनाता है, उस सदस्य के नाम पर। इसलिए आप अब पहुँच सकते हैं $modelऔर$data
modelऔर data) पहले से ही चर के रूप में मौजूद नहीं हैं। यदि वे करते हैं, तो संघर्ष से बचने prefixके extractलिए पैरामीटर का उपयोग करें ।
इसके दो रिटर्न स्टेटमेंट संभव नहीं हैं। हालाँकि, यह त्रुटि नहीं फेंकता है, लेकिन जब फ़ंक्शन को कॉल किया जाता है तो आपको केवल पहला रिटर्न स्टेटमेंट मान प्राप्त होगा। बदले में कई मान प्राप्त करने के लिए हम एरे के रिटर्न का उपयोग कर सकते हैं। उदाहरण के लिए:
function test($testvar)
{
// do something
//just assigning a string for example, we can assign any operation result
$var1 = "result1";
$var2 = "result2";
return array('value1' => $var1, 'value2' => $var2);
}
कार्य, परिभाषा के अनुसार, केवल एक मान लौटाते हैं।
हालाँकि, जैसा कि आपने माना, वह मान एक सरणी हो सकता है।
तो आप निश्चित रूप से कुछ ऐसा कर सकते हैं:
<?PHP
function myfunc($a,$b){
return array('foo'=>$a,'bar'=>$b);
}
print_r(myfunc('baz','bork'));
उस ने कहा, यह एक पल लेने के लायक है और आप जो भी हल करने की कोशिश कर रहे हैं उसके बारे में सोच रहे हैं। यदि आप एक जटिल परिणाम मान (जैसे कोई सरणी, या ऑब्जेक्ट) लौटा रहे हैं, तो यह पूरी तरह से मान्य है, यदि आप सोच रहे हैं कि "मैं दो मान वापस करना चाहता हूं", तो आप खराब तरीके से डिजाइन कर सकते हैं। आपके प्रश्न में अधिक विस्तार के बिना, यह कहना मुश्किल है, लेकिन इसे रोकने और दो बार सोचने के लिए कभी दर्द नहीं होता है।
बेस्ट प्रैक्टिस है अपने लौटे हुए वेरिएबल्स को ऐरे में डालना और फिर list()ऐरे वैल्यूज़ को वेरिएबल्स में असाइन करना।
<?php
function add_subt($val1, $val2) {
$add = $val1 + $val2;
$subt = $val1 - $val2;
return array($add, $subt);
}
list($add_result, $subt_result) = add_subt(20, 7);
echo "Add: " . $add_result . '<br />';
echo "Subtract: " . $subt_result . '<br />';
?>
PHP 7.1 <= के लिए आप नए सिंटैक्स का उपयोग कर सकते हैं ( सूची फ़ंक्शन के बजाय ):
/**
* @return array [foo, bar]
*/
function getFooAndBar(): array {
return ['foo', 'bar'];
}
[$foo, $bar] = getFooAndBar();
print 'Hello '. $foo . ' and ' . $bar;
यदि आप 2-3 चर वापस करना चाहते हैं तो यह मेरे लिए ठीक है, अन्यथा आपको वांछित गुणों के साथ एक वस्तु का उपयोग करना चाहिए।
मैंने कई रिटर्न वैल्यू PHP फ़ंक्शन के लिए इसे लागू किया है। अपने कोड के साथ अच्छा हो। धन्यवाद।
<?php
function multi_retun($aa)
{
return array(1,3,$aa);
}
list($one,$two,$three)=multi_retun(55);
echo $one;
echo $two;
echo $three;
?>
हरे रंग की टिक के ऊपर दिया गया उत्तर वास्तव में गलत है। यदि आप एक सरणी लौटाते हैं, तो आप PHP में कई मान लौटा सकते हैं। एक उदाहरण के लिए निम्न कोड देखें:
<?php
function small_numbers()
{
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
यह कोड वास्तव में PHP की वेबसाइट पर निम्नलिखित पेज से कॉपी किया गया है: http://php.net/manual/en/functions.returning-values.php मैंने खुद भी कई बार एक ही तरह के कोड का उपयोग किया है, इसलिए पुष्टि कर सकते हैं कि यह अच्छा है और यह काम करता है।
PHP में कार्य केवल एक चर वापस कर सकते हैं। आप वैश्विक दायरे के साथ चर का उपयोग कर सकते हैं, आप सरणी वापस कर सकते हैं, या आप फ़ंक्शन के संदर्भ में चर बदल सकते हैं और मूल्य बदल सकते हैं, .. लेकिन यह सब आपके कोड की पठनीयता को कम कर देगा। मैं आपको सुझाव दूंगा कि आप कक्षाओं में देखें।
सोचा था ऊपर से कुछ प्रतिक्रियाओं पर विस्तार करूंगा…।
class nameCheck{
public $name;
public function __construct(){
$this->name = $name;
}
function firstName(){
// If a name has been entered..
if(!empty($this->name)){
$name = $this->name;
$errflag = false;
// Return a array with both the name and errflag
return array($name, $errflag);
// If its empty..
}else if(empty($this->name)){
$errmsg = 'Please enter a name.';
$errflag = true;
// Return both the Error message and Flag
return array($errmsg, $errflag);
}
}
}
if($_POST['submit']){
$a = new nameCheck;
$a->name = $_POST['name'];
// Assign a list of variables from the firstName function
list($name, $err) = $a->firstName();
// Display the values..
echo 'Name: ' . $name;
echo 'Errflag: ' . $err;
}
?>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>" >
<input name="name" />
<input type="submit" name="submit" value="submit" />
</form>
यह आपको एक इनपुट फ़ील्ड और सबमिट बटन देगा, यदि नाम इनपुट फ़ील्ड खाली है तो यह त्रुटि ध्वज और एक संदेश लौटाएगा। यदि नाम फ़ील्ड का मान है, तो यह मान / नाम और गलत के झंडे के लिए 0 = कोई त्रुटि नहीं लौटाएगा। उम्मीद है की यह मदद करेगा!
जवाब न है। जब पार्सर पहले रिटर्न स्टेटमेंट पर पहुंचता है, तो यह कॉलिंग फ़ंक्शन पर वापस नियंत्रण करेगा - आपका दूसरा रिटर्न स्टेटमेंट कभी भी निष्पादित नहीं किया जाएगा।
किसी सरणी में सभी चर जोड़ें और फिर अंत में वापस लौटें array।
function test($testvar)
{
// do something
return array("var1" => $var1, "var2" => @var2);
}
और तब
$myTest = test($myTestVar);
//$myTest["var1"] and $myTest["var2"] will be usable
मुझे लगता है कि एलीगो ने जवाब स्पष्ट रूप से समझाया है। लेकिन यदि आप दोनों मानों को वापस करना चाहते हैं, तो उन्हें एक सरणी में रखें और वापस लौटा दें।
function test($testvar)
{
// do something
return array('var1'=>$var1,'var2'=>$var2);
//defining a key would be better some times
}
// रिटर्न वैल्यू तक पहुंचने के लिए
$returned_values = test($testvar);
echo $returned_values['var1'];
echo $returned_values['var2'];
$thisकीवर्ड का उपयोग करते हैं फिर भी कोई वर्ग या वस्तु का उल्लेख नहीं किया गया है। 2) यदि आप अपने चर में मान लौटाते हैं $returned_values, तो आपको उस चर से प्रतिध्वनि करनी चाहिए:echo $returned_values['var1'];
<?php
function foo(){
$you = 5;
$me = 10;
return $you;
return $me;
}
echo foo();
//output is just 5 alone so we cant get second one it only retuns first one so better go with array
function goo(){
$you = 5;
$me = 10;
return $you_and_me = array($you,$me);
}
var_dump(goo()); // var_dump result is array(2) { [0]=> int(5) [1]=> int(10) } i think thats fine enough
?>
आप संदर्भ द्वारा उन्हें सेट करके दो या अधिक चर के मान प्राप्त कर सकते हैं:
function t(&$a, &$b) {
$a = 1;
$b = 2;
}
t($a, $b);
echo $a . ' ' . $b;
आउटपुट:
1 2
यह इसे करने का सबसे आसान तरीका है:
public function selectAllUsersByRole($userRole, $selector) {
$this->userRole = $userLevel;
$this->selector = $selector;
$sql = "SELECT * FROM users WHERE role <= ? AND del_stat = 0";
$stm = $this->connect()->prepare($sql); // Connect function in Dbh connect to database file
$stm->execute([$this->userRole]); // This is PHP 7. Use array($this->userRole) for PHP 5
$usersIdArray = array();
$usersFNameArray = array();
$usersLNameArray = array();
if($stm->rowCount()) {
while($row = $stm->fetch()) {
array_push($usersIdArray, $row['id']);
array_push($usersFNameArray, $row['f_name']);
array_push($usersLNameArray, $row['l_name']);
// You can return only $row['id'] or f_name or ...
// I used the array because it's most used.
}
}
if($this->selector == 1) {
return $usersIdArray;
}elseif($this->selector == 2) {
return $usersFNameArray;
}elseif($this->selector == 3) {
return $usersLNameArray;
}
}
हम इस फ़ंक्शन को कैसे कह सकते हैं?
$idData = $selectAllUsers->selectAllUsersByLevel($userRole, 0);
print_r($idData);
$idFName = $selectAllUsers->selectAllUsersByLevel($userRole, 1);
print_r($idFname);
बस। बहुत आसान।
मुझे इसी तरह की समस्या थी - इसलिए मैंने चारों ओर से कोशिश की और थोड़ा गुगला (इस धागे को ढूंढते हुए)। 5 मिनट के प्रयास और त्रुटि के बाद मुझे पता चला कि आप वापसी के एक लाइन में दो (शायद अधिक - अभी तक परीक्षण नहीं किए गए) लौटने के लिए "और" का उपयोग कर सकते हैं।
मेरा कोड:
function get_id(){
global $b_id, $f_id;
// stuff happens
return $b_id AND $f_id;
}
//later in the code:
get_id();
var_dump($b_id);
var_dump($f_id); // tested output by var_dump
यह काम करता हैं। मुझे वे दोनों मूल्य मिले जिनकी मुझे अपेक्षा थी / मिलनी चाहिए। मुझे आशा है कि मैं इस धागे को पढ़ने में किसी की मदद कर सकता हूं :)