Verschil "echo" en "return"
Ik zou graag willen weten wat precies het verschil is tussen een "echo" en een "return"..
Ik weet dat je een "return" toepast in een function(); , maar ik snap het niet helemaal..
Hieronder wat voorbeeld code (waarin echo en return beide werken en exact hetzelfde doen, lijkt althans):
Bij voorbaat dank,
Maarten Aders
echo schrijft een waarde naar het scherm, return geeft de waarde van een functie terug aan de aanroepende partij.
Het beste zie je dat als je jouw code als volgt aanpast:
Code (php)
Je zou nu verwachten dat resultaat 355 is, maar dat is niet zo. $resultaat is NULL
En als bijeffect wordt 355 op het scherm gezet, terwijl je daar niet om gevraagd hebt.
Gewijzigd op 29/08/2012 22:20:12 door John Berg
Daar moet ik even goed naar kijken.. Thx voor de hulp..
Ondertussen heb ik zelf ook al uitgevogeld dat als ik de "return" vervang voor "echo", ik bij het aanroepen van de functie geen "extra" echo meer hoef te typen, maar gewoon alleen de functie(-naam), alsof er helemaal geen parameters in de functie zitten, en de functie alleen maar een simpele "echo" uitvoert.
Hopelijk is dit een beetje te volgen.. :P
Een echo is direct zichtbaar, en een retrun-waarde is onzichtbaar.
Met die 'ontzichtbare' waarde mag je zelf doen wat je wilt.
Ik zal er wat mee moeten rommelen, om uit te vogelen wat het precies doet e.d.
Thx..
Als je iets direct wilt weergeven door php dan gebruik je 'echo', zowel in een functie als daarbuiten. Maar als je een functie boven aan je pagina zet en je gebruikt daar een 'echo' dan zul je dus boven aan je pagina de waarde te zien krijgen.
Omdat op te vangen zet je in de functie dan 'retrun' neer en roep je elders op de pagina de retrun aan met een echo + functie naam?
Zo heb ik dat altijd begrepen in het verschil tussen echo en retrun gebruik in functie's. Verbeter mij even als ik er naast zit.
Ook uit oogpunt van overzichtelijkheid is het kiezen voor het één of het ander, of je plaatst ene echo in de functie, of anders daarbuiten, in de proceduele code. In mijn ogen is dit laatste ook het beste leesbaarder en makkelijker te debuggen.
Een return is echt iets totaal anders dan een echo. Met een return geef je weer wat een functie teruggeeft, bijv. isset($foo) zal true of false teruggeven. De functie zal er zoiets uitzien:
Code (php)
Om te weten waarom we bij functies altijd return gebruiken en geen echo/print/iets anders moeten we teruggaan naar waarom we een functie schrijven. We beginnen daarom met deze hele simpele code:
Stel dat we ergens verderop in de code dit nogmaals doen. Dan ga je bij je zelf nadenken en denk je, waarom zou ik hier geen functie van maken. Stel dat ik later de plus in een keer wil veranderen dan hoef ik dat maar op 1 plek te veranderen, we gaan functioneel denken:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
function sum($a, $b)
{
echo $a + $b;
}
sum(59, 41); // geeft ook 100
sum(1, 1); // geeft 2
?>
function sum($a, $b)
{
echo $a + $b;
}
sum(59, 41); // geeft ook 100
sum(1, 1); // geeft 2
?>
Alleen we gaan nog functioneler denken, we gaan proberen zoveel mogelijk situaties waarin we de plus gebruiken op te lossen met 1 functie. In deze 2 situaties willen we de waarde echoën, maar wat als we later niet de waarde willen echoën, maar willen wegschrijven in een bestand of als argument voor een volgende functie willen gebruiken? Dan hebben we niks meer aan deze functie.
I.p.v. in de functie zelf te bepalen wat er met het resultaat gebeurd (namelijk het echoën) gaan we het resultaat gewoon teruggeven. Wat er daarna met deze waarde gebeurd zal die functie niks schelen, hij heeft zijn taak gedaan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dat is waarom we altijd returns gebruiken en niet bijv. een echo. Hopelijk is nu ook de taak van een return duidelijk.
Offtopic:
Als we onze functie nog functioneler willen maken zullen we moeten gaan nadenken aan situaties als dit:
We kunnen dit bijv. op deze manier oplossen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
function sum()
{
$answer = 0;
foreach (func_get_args() as $number) {
$answer += $number;
}
return $answer;
}
?>
function sum()
{
$answer = 0;
foreach (func_get_args() as $number) {
$answer += $number;
}
return $answer;
}
?>
echo => toon direct iets op het scherm, bijvoorbeeld:
return => geef een waarde terug, bijvoorbeeld:
Code (php)
Snap je?
Gewijzigd op 30/08/2012 08:23:51 door Ozzie PHP
Laat ik beginnen met mezelf verontschuldigen, omdat ik totaal niet meer heb gereageerd op alle antwoorden op mijn vraag over het verschil tussen "echo" en "return"..!
Ik ben mezelf ondertussen in aan het graven in (multi-dimensionale) arrays en de "sprintf()" dinges..
Zit midden in een php-opleiding en vind het behoorlijk pittig..
Anyway, ik heb net nogmaals de reacties teruggelezen en ik moet zeggen dat er hele uiteenlopende en verhelderende antwoorden bij zaten.. Misschien dat juist die uiteenlopendheid mij er zo breed over laat nadenken..
Bedankt!
Wouter J op 30/08/2012 00:23:58:
Frank, dat bekijk je verkeerd. En overigens is het ook in functioneel programmeren al not-done om echo's in functies te plaatsen.
Mee eens.
Het is een goed gebruik GEEN echo te gebruiken in een functie.
Soms wil je een functie uitvoeren die html-code maakt, maar nog niet (daar) tonen. Wellicht wil eerst zien wat er komt.
Na een echo kan je er niets meer aan doen.
Ja, met ob_start() en dat soort dingen die je niet dient te gebruiken voor dit.
Ik heb hem dus altijd beetje verkeerd begrepen maar snap hem nu wel.
Bedankt voor de uitleg.
Kijk, zo hebben we er allemaal wat aan..