Disable echo in function PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jop B

Jop B

10/08/2019 11:08:24
Quote Anchor link
Hi,


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
 
PHP hulp

PHP hulp

28/03/2024 20:02:39
 
Ward van der Put
Moderator

Ward van der Put

10/08/2019 11:23:01
Quote Anchor link
Je kunt output buffering (ob) inschakelen met ob_start() en na de echo de inhoud van de output buffer opslaan in een string met ob_get_contents().

Ik zou echter de functie herschrijven als dat niet te veel werk is, omdat de functie eigenlijk te veel doet.
 
Thomas van den Heuvel

Thomas van den Heuvel

10/08/2019 12:00:13
Quote Anchor link
Concreet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'
?>

Maar beter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function test($in) {
    return $in; // retourneer de waarde
}

$test = test('hello');
?>

NB wanneer je dit doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
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
 
Ozzie PHP

Ozzie PHP

10/08/2019 23:44:23
Quote Anchor link
Een stelregel bij het programmeren is dat een functie nooit iets echoot. Het beste zou dus zijn om de functie zelf aan te passen.
 
Thomas van den Heuvel

Thomas van den Heuvel

11/08/2019 19:25:42
Quote Anchor link
Dat is inderdaad het eindresultaat, maar misschien nog interessanter zijn de onderliggende redenen waarom. En ook wat je in plaats daarvan vaak beter kunt doen: het retourneren van informatie met het return-statement.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.