Disable echo in function PHP
Een simpele vraag:
Als je een bestaande functie van een andere programmeur wilt gebruiken maar de waarde wat hieruit komt niet wilt echoën maar in bijvoorbeeld een variabel wilt zetten is dit mogelijk?
Ik wil van de waarde uit die functie een vergelijk maken maar nu krijg ik de waarde voorgeschoteld als bezoeker.
Als dit niet kan, dan zal ik die functie van de andere programmeur moeten aanpassen.
Gr. Jop
Ik zou echter de functie herschrijven als dat niet te veel werk is, omdat de functie eigenlijk te veel doet.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function test($in) {
echo $in; // geef waarde weer
}
ob_start();
test('hello');
$test = ob_get_clean(); // nu bevat $test 'hello'
?>
function test($in) {
echo $in; // geef waarde weer
}
ob_start();
test('hello');
$test = ob_get_clean(); // nu bevat $test 'hello'
?>
Maar beter:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function test($in) {
return $in; // retourneer de waarde
}
$test = test('hello');
?>
function test($in) {
return $in; // retourneer de waarde
}
$test = test('hello');
?>
NB wanneer je dit doet:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function test($in) {
echo $in;
}
ob_start();
test('hello');
$test = ob_get_contents();
?>
function test($in) {
echo $in;
}
ob_start();
test('hello');
$test = ob_get_contents();
?>
Wordt er nog steeds 'hello' weergegeven.
ob_get_contents() maakt de output buffer niet leeg. Gebruik daarom in plaats hiervan ob_get_clean().
Gewijzigd op 10/08/2019 12:05:49 door Thomas van den Heuvel
Een stelregel bij het programmeren is dat een functie nooit iets echoot. Het beste zou dus zijn om de functie zelf aan te passen.
Een van de redenen waarom het handiger is om -in tegenstelling tot het weergeven- een waarde te retourneren is dat je deze dan kunt specificeren (is het een string, array, boolean et cetera) en ook gedefinieerd is (dit in tegenstelling tot helemaal geen return-waarde waarbij er niet zoveel te definiëren valt). Je kunt daarmee dus het gedrag van een functie beter vastleggen.
Daarnaast bevordert het retourneren van waarden de herbruikbaarheid. Daarbij is het simpelweg niet altijd de bedoeling om dingen (direct) weer te geven. Als je een functie op die manier opzet beperk je jezelf gewoon in de flexibiliteit waarmee je de functie kunt inzetten.
En dan is het vaak zo dat de uitvoer van de ene functie weer de invoer van een andere functie of stuk functionaliteit is. Met het retourneren van waarden is het makkelijker om zaken aan elkaar te koppelen omdat informatie makkelijk overdraagbaar is.
Het is dus niet zozeer dat het echo'en binnen functies slecht is (en soms is dit juist het doel van de functie), maar het retourneren van waarden biedt je gewoon veel meer mogelijkheden. Op deze manier neemt de functie ook niet op voorhand zelf de beslissing hoe de informatie gebruikt gaat worden, en deze doet hierover dan ook geen aannames.
Bij het debuggen van code is het juist weer superhandig om rechtstreeks informatie weer te geven omdat dit je direct inzicht geeft in de toestand van (waarden van) variabelen / de applicatie.