Per rispondere direttamente alla tua domanda: non fare mai eco a 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. -->
Scappare in PHP è uno spreco se tutto ciò che devi fare è passare in testo statico o 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 stai trasmettendo grandi quantità di testo statico a PHP senza motivo. (A volte c'è un motivo.)
La migliore pratica è far funzionare la tua logica e il tuo grugnito nei file senza HTML, solo PHP.
Il modo in cui mi piace farlo è con un framework MVC. Ho puro PHP nei modelli e nei controller e una combinazione di HTML e PHP nelle viste. Non è necessario un framework MVC; potresti semplicemente inserire la tua miscela di HTML nei file modello, che poi includerai nei tuoi file PHP puri.
Una volta che hai creato le tue variabili (che non includono HTML) in file PHP puri, puoi passarle al file con il tuo HTML. Lì, e solo lì, va bene mescolare HTML e PHP. Ma questo è un aspetto importante ma, quando si lavora con file con HTML, mantenere il PHP al minimo.
Fortunatamente, PHP viene fornito con strumenti intuitivi che facilitano la lettura di PHP se miscelato con HTML.
Sintassi alternativa
La migliore pratica è usare la sintassi PHP normale quando si scrive PHP puro, ma la sintassi alternativa, quando si mescolano PHP e HTML.
In normali file PHP senza HTML:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
Questo è bello per puro PHP, ma non è l'ideale quando si esce da HTML. In particolare, le parentesi graffe di chiusura sono spesso difficili da capire quando si presentano in grandi pile di 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 i motivi sopra descritti, vogliamo che l'HTML non venga inviato a PHP. Facciamo così:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
Abbiamo rimosso il nostro HTML dai nostri tag PHP, il che è un miglioramento. Ma potremmo andare oltre.
Notare quanto non informativo il tutore di chiusura è? Non sappiamo se sta chiudendo un ciclo o un'istruzione if. Questo sembra banale nell'esempio sopra, ma spesso ci sono dozzine di righe di HTML all'interno di if / endif all'interno di un loop / endloop.
La migliore pratica è che in un file che mescola PHP e HTML, usi la sintassi alternativa, che omette l'apertura e la chiusura delle parentesi graffe ( { }
):
<?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:
- Ancora una volta, HTML e testo, mentre controllati da PHP, sono al di fuori dei
<?php ?>
tag, quindi non vengono interpretati. Per i motivi sopra descritti, questo è buono.
- Questo è molto più informativo che se questo fosse tutto php, compresi gli apparecchi di chiusura casuali (
<?php } ?>
) che chiudono le cose che sono difficili da trovare dove si sono aperti (perché sono mescolati con un briciolo di HTML dall'aspetto disordinato). Ancora una volta, immagina un grande file HTML con loop e istruzioni if. Specificare cosa si sta chiudendo può chiarire molto.
La stessa sintassi del modello può essere utilizzata anche per i loop:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
Tag brevi
Un altro ottimo strumento fornito da PHP che, ancora una volta, si desidera utilizzare solo quando si mescolano PHP e HTML insieme, sono i tag brevi. Potrebbe essere necessario attivare i tag brevi nel file php.ini. Una volta attivati, i tag brevi rendono tutto ancora più leggibile.
Senza i tag brevi, devi scrivere, <?php echo $something; ?>
ma con i tag brevi puoi scrivere <?=$something?>
e avrà lo stesso esatto risultato.
Quando si combinano tag brevi e la sintassi alternativa di PHP, è possibile scrivere davvero alcuni file HTML eleganti, che includono elementi PHP. Prendendo il nostro ultimo esempio di loop (solo la parte all'interno del loop), i tag brevi ci consentono 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 è incredibilmente leggibile. I sistemi di template, tuttavia, sono molto al di fuori dell'ambito della domanda originale (che comunque ho lasciato qualche tempo fa).