HTML Output in PHP

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.

Non ci sono commenti per questo Post

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL