Quale è meglio: includere l'HTML all'interno del codice PHP o al di fuori di esso?

26

Guarda questo:

<?php
echo "Hello World";
?>
<br />
<?php
echo "Welcome";
?>

E ora guarda questo:

<?php
echo "Hello World";
echo "<br />";
echo "Welcome";
?>

Quale degli esempi sopra è considerato migliore (almeno dal punto di vista delle prestazioni) ?.

So che gli esempi sono banali ma voglio seguire le abitudini della buona pratica fin dall'inizio, così quando avrò sempre più linee non influenzerebbero le prestazioni o qualsiasi altra cosa in modo negativo.

    
posta rashed 24.12.2012 - 02:50
fonte

6 risposte

22

Come sottolinea il commento, dovrebbe essere fatto da modelli. Ma se solo la tua scelta è possibile. Il caso 1 sarà migliore. Questo è lo stesso concetto di Android che gonfia il layout con xml, o programmaticlly che crea l'interfaccia utente. Il tuo <br/> è un contenuto statico del tuo html e tutto ciò che farà il tuo server è di mostrarlo. Ma se si utilizza php, per eseguirlo, questo utilizzerà le risorse del server e si sta calcolando.

Così è come dovrebbe essere fatto: index.php:

<?php
include 'header.html';
...
include 'footer.html';  
?>  

header.html e footer.html sono modelli.

    
risposta data 24.12.2012 - 03:11
fonte
52

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:

  1. 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.
  2. 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).

    
risposta data 24.12.2012 - 04:14
fonte
3

Stai imparando, dimentica le prestazioni nelle pagine PHP. Scegli invece il modo in cui è più facile da leggere .

Guardando i tuoi due esempi, la seconda è sicuramente la più facile da leggere, anche se penso che sia a causa della spaziatura che hai usato. Dici che stai cercando di sviluppare buone abitudini fin dall'inizio, penso che il tuo tempo possa essere speso meglio facendo leggere bene il tuo codice. Questo potrebbe significare riscrivere una sezione diverse volte finché non sei soddisfatto.

Se sei davvero appassionato del dietro le quinte, ti darò una spiegazione per spiegare cosa succede con il contenuto statico in una pagina PHP. Una delle prime cose è "analizzare" l'intera pagina in codice eseguibile (come vedi tra <?php ?> tag). Una parte di questo è trasformare qualsiasi testo statico in echo .

Quindi questo:

<?php echo "Hello World"; ?>
<br />
<?php echo "Welcome"; ?>

viene trasformato in qualcosa di simile a:

echo "Hello World";
echo "<br />";
echo "Welcome";

C'è un costo molto piccolo associato all'analisi, ma nessuna differenza nell'esecuzione del codice risultante. Se stai utilizzando un acceleratore PHP, l'analisi viene eseguita una sola volta e quindi memorizzata nella cache, quindi non vedrai alcuna differenza di prestazioni dopo il caricamento della prima pagina.

Ricorda: facile da leggere!

    
risposta data 15.01.2013 - 11:22
fonte
0

Una delle migliori caratteristiche di PHP è che è stato progettato per essere incorporato in HTML. Di solito è usato nella creazione di modelli. Rende il tuo codice più facile da leggere e conservare, perché separa il codice PHP dall'HTML.

Ma se si stampa solo una pagina statica come "Hello World!" è una cattiva idea.

    
risposta data 01.08.2015 - 02:36
fonte
0

Per rispondere alla tua domanda semplicemente: dato il tuo codice di esempio, ci sarà poca o nessuna differenza in perfomance. PHP viene elaborato a livello di server / host, mentre HTML viene elaborato dall'agente utente / persona che guarda la tua pagina web sul proprio browser. Chi sarà più veloce? Difficile da determinare.

Sono d'accordo con gli altri dicendo che ognuno ha i suoi punti di forza e di debolezza e può lavorare davvero bene insieme. PHP è programmabile e può fare calcoli e lavorare con variabili. Per questo motivo tutte le mie pagine finiscono per essere PHP e richiedono snippet di codice HTML - i template come sono stati menzionati e inseriscono variabili in modo che il mio HTML diventi dinamico.

Nel tuo esempio potresti stringere l'HTML insieme in un'unica istruzione PHP in questo modo:

    <?php echo "Hello World<br>Welcome"; ?>

Spero che questo aiuti a chiarire un po '.

    
risposta data 29.03.2016 - 05:47
fonte
-1

Generalmente viene considerata una cattiva forma per generare codice HTML da PHP. Ci sono diversi motivi per questo, ma il principale è che è più facile, soprattutto a lungo termine, mantenere il codice se il codice HTML e PHP è separato.

È proprio come HTML, CSS e Javascript; è molto più semplice e pratico tenerlo separato.

Tecnicamente, tuttavia, rende assolutamente nessuna differenza il modo in cui generi elementi. Per PHP è solo byte di fila.

    
risposta data 24.12.2012 - 12:30
fonte

Leggi altre domande sui tag