Vraag & Antwoord

Webprogrammeren & scripting

returnwaarde mee nemen vanuit functie (php)

4 antwoorden
  • start.php [code:1:9753b4a36a]<?php include("binnen.php"); $overslaan='false'; binnen($overslaan); echo '<br>'.$overslaan; ?>[/code:1:9753b4a36a] binnen.php [code:1:9753b4a36a]<?php function binnen($overslaan) { $overslaan="true"; echo $overslaan; return $overslaan; } ?>[/code:1:9753b4a36a] Ik krijg als uitkomst true false Het is duidelijk dat de variable waarde NIET wordt meegenomen vanuit de functie, maar waarom NIET ?? Ik zal wel iets fout doen, maar kan niet ontdekken wat.
  • Ik heb het al in een boek gevonden: function binnen(&$overslaan) Ben ik dagen zoet mee geweest. :cry:
  • Het gaat mis omdat je de geretourneerde waarde niet opslaat. Juist zou zijn: Start.php[code:1:4763476567]<?php include("binnen.php"); $overslaan = 'false'; $overslaan = binnen($overslaan); echo '<br>'.$overslaan; ?>[/code:1:4763476567]Overigens is het mij onduidelijk waarom je boolean waarden zou opslaan als string, maar voor de test is dat niet zo interessant. - Bas
  • [quote:6d0129fe24="Rumaro"]Ik heb het al in een boek gevonden: function binnen(&$overslaan)[/quote:6d0129fe24]Ai, ik weet niet of dat zo verstandig is! (Of eigenlijk: gebruik die alleen als je weet wat je doet!) Het verschil zit 'm namelijk in de [i:6d0129fe24]scope[/i:6d0129fe24] van de variabele. Waar je in je eerste post de variabele aanroept als [i:6d0129fe24]call by value[/i:6d0129fe24] (gebruik de waarde van de parameter maar verander de waarde van de originele variabele niet) doe je het bij de tweede als [i:6d0129fe24]call by reference[/i:6d0129fe24] (alle aanpassingen op de variabele werken door in de doorgegeven variabele). Deze laatste methode is doorgaans wat ondoorzichtig en kan bij verkeerd gebruik hele vervelende en onvoorspelbare gevolgen hebben. Call by value is eigenlijk altijd de voorkeursmethode, met als uitzondering het gebruik van variabelen met een hele complexe structuur (ingewikkelde objecten). Gezien het feit dat je een waarde retourneert (op zichzelf juist) lijkt het mij dat je niet wil werken met call by reference, welke in dit geval een onjuist lapmiddel is. - Bas

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.