Per rispondere direttamente alla tua domanda: Mai echo testo statico o HTML. Lascialo fuori dal tuo PHP.
<?php echo "<p>Hello World</p>"; // Alway wrong. ?>
<p>Hello World</p> <!-- Does the same thing, faster, and is more readable. -->
L'escape in PHP è uno spreco se tutto quello che devi fare è passare il testo statico o l'html statico. Tutto il codice all'interno di <?php ?>
viene inviato a PHP per essere interpretato.
Ciò significa che il tuo sito web è più lento e stai sprecando elettricità se passi a una quantità elevata di testo statico in PHP senza motivo. (A volte c'è un motivo.)
La migliore pratica è quella di avere la logica e il grugnito nei file senza HTML, solo PHP.
Il modo in cui mi piace farlo è con un framework MVC. Ho puro PHP nei modelli e controller e una combinazione di HTML e PHP nelle viste. Non hai bisogno di un framework MVC; puoi semplicemente inserire la tua miscela di HTML nei file di modelli, che poi includerai nei tuoi file PHP puri.
Una volta che hai le tue variabili (che non includono HTML in esse) create in file PHP puri, puoi passarle al file con il tuo HTML. Lì, e solo lì, va bene mescolare HTML e PHP. Ma, e questo è importante ma, quando si lavora con file che hanno HTML, mantenere il PHP al minimo.
Fortunatamente, PHP è dotato di strumenti intuitivi per rendere il PHP più facile da leggere se mescolato con html.
Sintassi alternativa
La procedura migliore è utilizzare la sintassi PHP normale quando si scrive PHP puro, ma la sintassi alternativa, quando si mischiano PHP e HTML.
In normali file PHP senza HTML:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
Questo è bello per PHP puro, ma non è l'ideale quando si scappa dall'HTML. In particolare, le parentesi graffe di chiusura sono spesso difficili da capire quando vengono visualizzate in grandi file HTML.
Sembra, in base alla tua domanda che avresti scritto, in un file che mescola HTML e PHP, questo:
<?php
if ($something) {
echo '<p>Hello World.</p>';
}
?>
Per le ragioni sopra descritte, vogliamo che l'HTML non venga inviato a PHP. Lo facciamo in questo modo:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
Abbiamo ottenuto il nostro codice HTML dai nostri tag PHP, che è un miglioramento. Ma potremmo andare oltre.
Si noti quanto non sia efficace la parentesi di chiusura? Non sappiamo se sta chiudendo un ciclo o un'istruzione if. Questo sembra banale nell'esempio precedente, ma ci sono spesso dozzine di righe di HTML all'interno di if / endif all'interno di un loop / endloop.
La migliore pratica è che in un file che mischia PHP e HTML, usi la sintassi alternativa, che omette le parentesi di apertura e chiusura ( { }
):
<?php if ($something): ?>
<p>Hello world.</p>
<?php endif; ?>
A parte la semantica della nuova sintassi ( :
e endif;
invece di {
e }
), dovresti notare due cose:
- Anche in questo caso, l'HTML e il testo, mentre controllati da PHP, non rientrano nei tag
<?php ?>
, quindi non vengono interpretati. Per le ragioni sopra descritte, questo è buono.
- Questo è molto più informativo che se tutto questo fosse php incluse le parentesi casuali di chiusura (
<?php } ?>
) che chiudono cose che sono difficili da trovare dove sono state aperte (perché sono mescolate con un buch di HTML disordinato). Ancora una volta, immagina un grosso file HTML con loop e istruzioni if. Specificare cosa stai chiudendo può chiarire molto.
La stessa sintassi amichevole del template può essere utilizzata anche per i loop:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
Tag brevi
Un altro grande strumento fornito da PHP che, ancora una volta, si desidera utilizzare solo quando si mischiano PHP e HTML insieme, sono tag brevi. Potrebbe essere necessario attivare i tag brevi nel file php.ini. Una volta attivato, i tag brevi rendono tutto ancora più leggibile.
Senza tag brevi, devi scrivere <?php echo $something; ?>
ma con tag brevi puoi scrivere <?=$something?>
e avrà lo stesso risultato esatto.
Quando combini i tag brevi e la sintassi PHP alternativa, puoi davvero scrivere alcuni eleganti file HTML, che includono elementi PHP. Prendendo il nostro ultimo esempio di loop (solo la parte all'interno del loop), i tag brevi ci permettono di ridurre:
<li><?php echo $thing; ?></li>
a
<li><?=$thing?></li>
che è molto più leggibile.
Potremmo andare oltre? Sì. Usando vari sistemi di template puoi fare cose come:
<li>{thing}</li>
Che è sorprendentemente leggibile. I sistemi di template, tuttavia, sono al di fuori della portata della domanda originale (che ho lasciato qualche tempo fa comunque).