I metodi (o funzioni) che restituiscono un output HTML visivo e immediato possono essere confezionate sostanzialmente in due modi:
Utilizzo di variabili ed echo
Il metodo qui sotto utilizza una variabile $result, che viene preparata con l’output che verra stampato a video tramite echo.
1 2 3 4 5 | // Utilizzo una variabile ed eseguo poi un echo function messaggio( $messaggio ) { $result = '<div id="mes">' . $messaggio . '</div>'; echo $result; } |
Vantaggi
L’output è in una variabile che, oltre ad essere ulteriormente alterata, può essere restituita: basta sostituire echo $result; con return $result;.
Svantaggi
La formattazione dell’HTML è inserita da “codice”, cioè all’interno delle virgolette. Questo produce alcuni fastidi e problemi quando si ha a che fare con codice HTML corposo ed articolato. Inoltre rende faticosi eventuali aggiustamenti successivi.
HTML diretto, mix php
In quest’altro esempio, invece, abbiamo utilizzato l’output diretto, cioè non è richiesto di usare un echo in quanto l’output è controllato dalla chiusura ed apertura deli tag php <?php ?>.
1 2 3 4 5 6 7 8 | // Output diretto function messaggio( $messaggio ) { ?> <div id="mes"> <?php echo $messaggio ?> </div> <?php } |
Vantaggi
Il codice HTML è “così com’è”, intervallato, dove serve, con il codice PHP. Questo rende più facile mettere le mani al codice ed eseguire “copia & incolla” di codice HTML.
Svantaggi
L’output non può essere restituito, ma solo visualizzato.
Alternativa
Nella maggioranza dei casi entrambe le procedure sono equivalenti. La scelta può dipendere dallo stile del programmatore. Leggendo vantaggi e svantaggi dell’una e dell’altra soluzione, si può prendere una decisione a seconda dei casi.
Tuttavia esiste un caso particolare che – apparentemente – preclude l’uso della prima soluzione; quella dell’output tramite variabile. Questo può verificarsi quando abbiamo una funzione esterna che emette – essa stessa – un output diretto a video, non restituendo quindi nessun valore. Ad esempio:
1 2 3 4 5 | // miaFunzione() stampa a video "Ciao" function messaggio( $messaggio ) { $result = '<div id="mes">' . $messaggio . " " . miaFunzione() . '</div>'; echo $result; } |
La scritta "Ciao" viene stampata prima della echo $result;! Esiste tuttavia un modo per risolvere la cosa, adottando addirittura il secondo metodo visto sopra, cioè proprio quello senza variabile. Ecco come fare in questo caso:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // miaFunzione() stampa a video "Ciao" function messaggio( $messaggio ) { ob_start(); ?> <div id="mes"> <?php echo $messaggio . " "; miaFunzione(); ?> </div> <?php $result = ob_get_contents(); ob_end_clean(); return $result; // oppure // echo $result; } |
ob_start() blocca l’output PHP, che viene dirottato in un buffer interno. $result = ob_get_contents(); preleva questo buffer interno. ob_end_clean(); smette di “bufferizzare” e ripulisce il buffer interno.








7
Non ci sono commenti per questo Post
Lascia un commento