2012-02-22 15 views
31

हां, मैंने इस प्रश्न को गुमराह किया है और यहां तक ​​कि मेरी पाठ्यपुस्तक (डॉन गोस्सेलिन द्वारा PHP) को भी संदर्भित किया है, लेकिन मैं गंभीरता से स्पष्टीकरण को समझ नहीं पा रहा हूं।सादे अंग्रेजी में PHP गूंज और PHP रिटर्न के बीच क्या अंतर है?

मेरी समझ से:

गूंज = = एक समारोह

वापसी की अंतिम परिणाम से पता चलता एक समारोह

मैं निम्नलिखित में दोनों echo और return लागू किया से मान देता है कार्य मैं echo के बजाय return का उपयोग करने के अंतर या 'प्रभावशीलता' को नहीं देख सकता।

<?php 
echo "<h1 style='font-family:Helvetica; color:red'>Using <em>echo</em></h1>"; 
function add1($x, $y){ 
    $total = $x + $y; 
    echo $total; 
} 
echo "<p>2 + 2 = ", add1(2, 2), "</p>"; 

echo "<h1 style='font-family:Helvetica; color:red'>Using <em>return</em></h1>"; 
function add2($x, $y){ 
    $total = $x + $y; 
    return $total; 
} 
echo "<p>2 + 2 = ", add2(2, 2), "</p>"; 

?> 

दोनों परिणाम प्रदर्शित करते हैं! मुझे क्या समझ में नहीं आ रहा है?

+0

मुझे लगता है कि 'echo' की परिभाषा' आउटपुट एक या अधिक स्ट्रिंग्स 'है, यह परिभाषा स्वयं पर्याप्त स्रोत स्पष्ट है: http://php.net/manual/en/function.echo.php – ianace

+0

मैं हमेशा सोचता हूं डेटा को निर्यात करने के तरीके के रूप में "वापसी" कथन ताकि इसका पुन: उपयोग किया जा सके। लौटाया गया डेटा अपने "कच्चे" प्रारूप में वितरित किया जाता है। "गूंज" के लिए, डेटा हमेशा एक स्ट्रिंग (यहां तक ​​कि संख्याएं) है क्योंकि यह कंप्यूटर मॉनीटर (या स्क्रीन) को लक्षित कर रहा है जो केवल स्ट्रिंग मान स्वीकार करता है। – tony

उत्तर

87

मैं इस पर एक पूरी तरह से गैर-तकनीकी उत्तर देने जा रहा हूं।

मान लें कि सैली फंक्शन नाम की एक लड़की है। आप जानना चाहते हैं कि वह आपको पसंद करती है या नहीं। इसलिए जब आप ग्रेड स्कूल में हैं, तो आप सैली को एक नोट पास करने का निर्णय लेते हैं (पैरामीटर के साथ फ़ंक्शन को कॉल करें) उससे पूछें कि क्या वह आपको पसंद करती है या नहीं। अब आप जो करने की योजना बना रहे हैं वह उसे पूछ रही है और फिर वह सबको बता रही है कि वह आपको क्या बताती है। इसके बजाय, आप उससे पूछते हैं और फिर वह सभी को बताती है। यह लौटने के बराबर है (आप जानकारी प्राप्त कर रहे हैं और इसके साथ कुछ कर रहे हैं) उसकी प्रतिध्वनि बनाम (बिना किसी नियंत्रण के सभी को बताएं)।

आपके मामले में क्या हो रहा है यह है कि जब सैली echo वह आपकी ओर से नियंत्रण ले रही है और कह रही है कि "मैं अभी लोगों को यह बताने जा रहा हूं" कि आप उसकी प्रतिक्रिया लेने में सक्षम हों और आप क्या करें इसके साथ करना चाहता था। अंत परिणाम यह है कि, आप एक ही समय में लोगों को बता रहे थे क्योंकि आप पहले से प्रतिबिंबित करने वाली चीज़ों को प्रतिबिंबित कर रहे थे लेकिन वापस नहीं लौट आए (उन्होंने के बीच में आपको के बीच में काट दिया, यदि वह आपको पसंद करती है या आपकी कक्षा को बताती है या नहीं)

+1

आप इसे सरल समझा नहीं सकते थे! यद्यपि मुझे अभी भी समझने की कोशिश करने में कुछ कठिनाई है कि मैं फ़ंक्शन के भीतर क्यों प्रतिबिंबित नहीं कर सकता हूं और फिर फ़ंक्शन को प्रतिबिंबित कर सकता हूं, मुझे समझ में आता है कि गूंज के बीच दृश्यों के पीछे क्या होता है और आपके समानता के लिए धन्यवाद देता है: डी –

+15

अगर आप चाहें तो विचार करें परिणामों को चर में सहेजने के लिए ताकि आप इसे बाद में उपयोग कर सकें। यदि आपका कार्य 'वापसी' की बजाय 'echo' है, तो आप वास्तव में चर में सहेजने के लिए कुछ भी नहीं प्राप्त कर रहे हैं। – jprofitt

+0

ओह मैं देखता हूँ !!!! मुझे लगता है कि मुझे अंत में यह मिल रहा है :- डी ... अब मुझे सिर्फ यह जानने की जरूरत है कि 'इको' और 'रिटर्न' के परिणाम अलग-अलग हो सकते हैं (देखें @ एरॉन सिडरहोम की पोस्ट नीचे देखें) आपको बहुत धन्यवाद jprofitt - तुम्हारी सहायता सराहनीय है! –

3

echo दस्तावेज़ में टेक्स्ट इत्यादि प्रस्तुत करता है, return किसी फ़ंक्शन/विधि आदि से डेटा लौटाता है जिसे इसे भी कहा जाता है। यदि आप एक रिटर्न गूंजते हैं, तो यह इसे प्रस्तुत करेगा (इसे टेक्स्ट/संख्या इत्यादि मानना ​​- ऑब्जेक्ट आदि नहीं)।

3

अपने उदाहरण के एक मामूली संशोधन का उपयोग करना:

<?php 

echo "<h1 style='font-family:Helvetica; color:red'>Using <em>echo</em></h1>"; 

function add1($x, $y){ 
    $total = $x + $y; 
    echo $total; 
} 

$result = add1(2, 2); 

echo "<p>2 + 2 = ", $result, "</p>"; 

echo "<h1 style='font-family:Helvetica; color:red'>Using <em>return</em></h1>"; 

function add2($x, $y){ 
    $total = $x + $y; 
    return $total; 
} 

$result = add2(2, 2); 

echo "<p>2 + 2 = ", $result, "</p>"; 

?> 

Can you see the difference?

+0

-1 कोई वास्तविक स्पष्टीकरण के लिए! – byronyasgur

2

दोनों कार्यों आप एक लाइन के पीछे है, जो अपने उत्पादन को टॉगल करता है:

echo "<p>2 + 2 = ", add1(2, 2), "</p>"; 
echo "<p>2 + 2 = ", add2(2, 2), "</p>"; 

echo प्रिंट मूल्य ताकि आप इसे पढ़ सकते हैं return उदाहरण चर के लिए सहेजने के लिए मान देता है।

$result = add2(2, 2); 
// do more with result ... ? 
// output the result 
echo $result; 
6
return समारोह के साथ ही

कुछ हद तक एक चर की तरह व्यवहार किया जा सकता है।

तो

return add1(2, 3) + add1(10, 10); 

इच्छा उत्पादन:

25 

जबकि

echo add2(2, 3) + add2(10, 10); 

इच्छा उत्पादन:

5 
20 
0 

जैसा कि add2 के result नहीं है। यह केवल सामानों को प्रतिबिंबित करता है। वास्तव में कभी भी उस कोड पर वापस मूल्य वापस नहीं लौटाएगा जिसे इसे कहा जाता है।

बीटीडब्ल्यू, आप गूंगा नहीं हैं। आप बस एक नौसिखिया हैं। हम शुरुआत में सभी शुरुआती हैं, और एक निश्चित सीमा है जिसे आपको शुरुआत में खत्म करने की आवश्यकता होगी। शुरुआत में आपके पास शायद "गूंगा" प्रश्न होंगे, लेकिन सभी प्रयोग पर प्रयास करें और ऊपर रहें, और आप सीखेंगे।

HelloGoodbye 

वास्तविक उत्पादन होता है:

GoodbyeHello 

कारण यह है कि "गुडबाय" है

<?php 
function sayHelloLater(){ 
    return "Hello"; 
} 

function sayGoodbyeNow(){ 
    echo "Goodbye"; 
} 

$hello = sayHelloLater(); // "Hello" returned and stored in $hello 
$goodbye = sayGoodbyeNow(); // "Goodbye" is echo'ed and nothing is returned 

echo $hello; // "Hello" is echo'ed 
echo $goodbye; // nothing is echo'ed 
?> 

आप उत्पादन होने की उम्मीद कर सकते हैं:

+0

मुझे लगता है कि यहां क्या हो रहा है लेकिन 'क्यों' नहीं पता! मेरा मतलब है, क्यों पहले उदाहरण में यह परिणाम जोड़ रहा है लेकिन दूसरा वाला नहीं है: -एस –

+0

एक फ़ंक्शन एक जादू बॉक्स की तरह बहुत पसंद है। आप इसमें कुछ डालते हैं (पैरामीटर) और लीवर खींचते हैं, और कुछ होता है या कुछ वापस आ जाता है। जैसे आप एक सेब को एक काले बॉक्स में डालते हैं, और प्रेस शुरू करते हैं। बहुत सारी आवाज़ें और शोर के बाद बॉक्स अचानक जमीन में एक सेब का पेड़ लगाता है जो तुरंत पूर्ण आकार में बढ़ता है। ब्लैक बॉक्स/फ़ंक्शन यह करता है। लेकिन जब आप बॉक्स खोलते हैं तो एक सेब नहीं छोड़ा जाता है बल्कि केवल एक सेब क्रॉट होता है। यह वही काम करता है जो फ़ंक्शन देता है। –

+0

अब, add1 और add2 पर विचार करें। Add1 सामने वाला दो इनपुट ट्रे वाला एक काला बॉक्स है। पहली ट्रे में आप सेब की एक बड़ी पिंजरे डालते हैं, आपके लिए गिनने के लिए बहुत सारे लोग। दूसरी ट्रे में आप सेब के एक और बड़े पिंजरे डालते हैं, गिनने के लिए भी बहुत सारे लोग। जब आप शुरू करते हैं तो आप कुछ नोइस सुनते हैं और बॉक्स के पीछे से सभी सेब का एक पिंजरा आता है (सभी में 91.218 सेब)। –

36

निम्नलिखित पर विचार करें आउटपुट के रूप में echo'ed (लिखित), जैसे ही फ़ंक्शन कहा जाता है। दूसरी ओर, "हैलो" $hello चर पर वापस आ गया है। $goodbye वास्तव में खाली है, क्योंकि अलविदा समारोह कुछ भी वापस नहीं करता है।

20

मुझे लगता है कि आप अभी भी टिप्पणियां पोस्ट कर रहे हैं जो सुझाव देते हैं कि आप उलझन में हैं क्योंकि आप कोड के प्रवाह को समझ नहीं पाते हैं। शायद यह आपकी मदद करेगा (विशेष रूप से Mathias R. Jessen's answer के साथ)। अब

function sayHelloLater() { 
    return 'Hello'; 
} 

function sayGoodbyeNow() { 
    echo 'Goodbye'; 
} 

अगर आप ऐसा करते हैं:

तो इन दोनों कार्यों को फिर से लेने के

$hello = sayHelloLater(); 
$goodbye = sayGoodbyeNow(); 

echo $hello; 
echo $goodbye; 

आप अपनी स्क्रीन पर 'GoodbyeHello' के साथ छोड़ दिया जाएगा।

यहां क्यों है। कोड इस तरह चलेंगे:

$hello = sayHelloLater(); ---->-------->-------->------->------>-- 
                    ¦ 
    ¦   ^             ¦ 
    ¦   ¦           Call the function 
    v   ¦             ¦ 
    ¦   ^             ¦ 
    ¦   ¦             v 
    ¦ 
    v   "return" simply sends back     function sayHelloLater() { 
    ¦   'Hello' to wherever the  <----<----  return 'Hello'; 
    ¦    function was called.     } 
    v   Nothing was printed out 
    ¦   (echoed) to the screen yet. 
    ¦ 
    v 

$hello variable now has whatever value 
the sayHelloLater() function returned, 
so $hello = 'Hello', and is stored for 
whenever you want to use it. 

    ¦ 
    ¦ 
    v 
    ¦ 
    ¦ 
    v 

$goodbye = sayGoodbyeNow(); ---->-------->-------->------->------ 
                   ¦ 
    ¦   ^            ¦ 
    ¦    ¦          Call the function 
    v    ¦            ¦ 
    ¦   ^            ¦ 
    ¦    ¦            v 
    ¦    ¦ 
    v    ¦         function sayGoodbyeNow() { 
    ¦              echo 'Goodbye'; 
    ¦  The function didn't return     } 
    ¦  anything, but it already 
    v   printed out 'Goodbye'        ¦ 
    ¦                v 
    ¦   ^
    ¦   ¦         "echo" actually prints out 
    v   <-----------<-----------<---------  the word 'Goodbye' to 
    ¦             the page immediately at 
    ¦              this point. 
    ¦ 
    v 

Because the function sayGoodbyeNow() didn't 
return anything, the $goodbye variable has 
a value of nothing (null) as well. 

    ¦ 
    ¦ 
    ¦ 
    v 
    ¦ 
    ¦ 
    ¦ 
    v 

echo $hello; -------->-------> Prints 'Hello' to the screen at 
            this point. So now your screen says 
    ¦        'GoodbyeHello' because 'Goodbye' was 
    ¦        already echoed earlier when you called 
    ¦        the sayGoodbyeNow() function. 
    v 

echo $goodbye; ------>-------> This variable is null, remember? So it 
            echoes nothing. 
    ¦ 
    ¦ 
    ¦ 
    v 

And now your code is finished and you're left with 
'GoodbyeHello' on your screen, even though you echoed 
$hello first, then $goodbye. 
+0

अच्छी तरह से समझाया। – Bugfixer

+0

धन्यवाद यह अच्छी तरह से समझाया – Matt

4

मैं परीक्षण यह

1) सिर्फ एक समारोह के मूल्य वापस वापसी इसे बाद में एक चर में भंडारण के बाद इस्तेमाल किया पाने के लिए के बाद पाया अंतर की जोड़ी है, लेकिन इको बस उस मूल्य को प्रिंट करें जब आप फ़ंक्शन को कॉल करते हैं और कुछ भी नहीं लौटाते हैं।

यहाँ एचटीएमएल हम गूंज का उपयोग करना चाहिए में उत्पादन पीएचपी करने के लिए, इस

function myfunc() { echo "i am a born programmer"; }

$value = myfunc(); \\ it is going to print the 'i am a born programmer' as function would be called 

if(empty($value)===true) { 
    echo "variable is empty because function returns nothing"; 

}

1

मूल रूप से के लिए कम उदाहरण है। दूसरे शब्दों में, हमें इसे गूंजने की आवश्यकता है।

function myfunction() { 
// script content here, and sample out maybe like this : 

return $result; ---> sample 1 
echo $result; ---> sample 2 

} 

प्रत्येक नमूने के लिए html में $ परिणाम दिखाने के लिए:

इन दो उदाहरण नीचे एक स्पष्ट समझ दे देंगे

नमूना 1 के लिए हम का उपयोग करना चाहिए <?php echo $result ?>

नमूना 2 हम के लिए <?php $result ?>

नमूना 2 पर हमें इसे गूंजने की आवश्यकता नहीं है, क्योंकि हमने इसे फ़ंक्शन के अंदर गूंज दिया है।

4

फ़ंक्शन की प्रतिक्रिया के बीच अंतर यह है कि "प्रतिध्वनि" ब्राउज़र (डीओएम) को कुछ भेजता है, जबकि "वापसी" कॉलर को कुछ देता है।

function myFunction(
    return 5; 
} 

$myVar= myFunction(); //myVar equals 5 
echo $myVar; // will show a "5 " on the screen 


function myFunction() { 
    echo 5; 
} 

$myVar= myFunction(); // myVar equals 0, but the screen gets a "5" 
echo $myVar; // a zero on the screen next to "5" printed by function appears . 
5

तो, मूल रूप से आप गूंज का उपयोग जब भी आप ब्राउज़र के लिए उत्पादन कुछ करना चाहते हैं, और बदले का उपयोग करके ऐसी स्क्रिप्ट या समारोह समाप्त करने और अपनी स्क्रिप्ट के दूसरे हिस्से के लिए डेटा पर पास करना चाहते हैं करना चाहते हैं।

+1

यह सवाल का जवाब नहीं प्रदान करता है। –

0

बुडप्रेस में परिवर्तन करते समय मैंने सीखा एक बात यह है कि यह मुख्य रूप से नेस्टेड कोर फ़ंक्शंस पर रिटर्न का उपयोग करता है और फिर स्पिंटफ के उपयोग के साथ यह HTML में गतिशील चर को बांधता है और HTML के उस भाग को मुख्य फ़ंक्शन पर वापस लौटाता है जहां इसे बुलाया गया था और केवल तभी यह मुख्य समारोह में एक बार गूंजता था। ऐसा करके कोड मॉड्यूलर और डीबग करने में आसान हो जाता है।

0

मेरे दृष्टिकोण में echo और return के बीच सबसे महत्वपूर्ण अंतर है:
हर एक के लिए परिणाम के डेटा प्रकार।
जब हम लिखने कुछ कार्यों से नीचे की तरह:

<?php 
    $value = 150; 

    function firstFunction($value) { 
     return $value + 1; 
    } 
    echo firstFunction($value) . '<br />'; 

    function secondFunction($value) { 
     echo $value + 1; 
    } 
    secondFunction($value); 

और हाँ, उन दोनों को हमें एक निर्गम मूल्य के रूप में दे देंगे।
लेकिन, return मामले में, हम firstFunction($value) को int डेटा प्रकार के रूप में प्रिंट करेंगे।
अन्यथा, echo मामले में, हम secondFunction($value) को NULL डेटा प्रकार के रूप में प्रिंट करेंगे।
आप समझने के लिए var_dump() फ़ंक्शन के साथ प्रत्येक को प्रिंट करने का प्रयास कर सकते हैं।

<?php 
    var_dump(firstFunction($value)); ?> 
    <br /> 
<?php 
    var_dump(secondFunction($value)); 

यही अंतर हमें फायदा जब हम कुछ मान कि डेटाबेस से वापस आती है, विशेष रूप से गणित या कुछ है कि जैसे जैसे कार्य (पोस्ट दृश्य गिनती) में व्यवहार करेगा।
यह यहां लिखा गया है कि इस पर समझ में आता है।
आशा है कि मैंने इसे आसान तरीका समझाया है।

संबंधित मुद्दे