2010-01-27 7 views
45

Io lavoro molto in HTML misto e PHP e più tempo voglio solo solido HTML con un paio di variabili PHP in esso quindi il mio sguardo codice come questo:

<tr><td> <input type="hidden" name="type" value="<?php echo $var; ?>" ></td></tr> 

che è abbastanza brutto. Non c'è qualcosa di più breve, più simile al seguente?

<tr><td> <input type="hidden" name="type" value="$$var" ></td></tr> 

Questo è possibile, ma si ottiene bloccato con il "" (bisogna sostituirli tutti con '') e il layout è andato

echo "<tr><td> <input type="hidden" name="type" value="$var" ></td></tr>" 

C'è qualcosa di meglio?

+0

Ricorda che PHP è più veloce con virgolette singole che doppie, un d se necessario, utilizzare echo ''; –

+1

@LucianMinea Sono la stessa velocità. Le virgolette singole e le virgolette doppie sono solo * virgolette *, né "più veloci". Questo è spesso ripetuto disinformazione ed è completamente sbagliato. – meagar

+0

È più veloce con il singolo ed è facile vedere su blocchi di codice di grandi dimensioni. Il motivo è che PHP esegue automaticamente una "pulizia" delle virgolette sul runtime, ma non sulle virgolette singole. L'uso di virgolette rende anche il codice nella domanda bloccato, perché le virgolette si chiudono solo in una posizione errata. Inoltre, stavo solo cercando di dare all'uomo una soluzione, con un po 'di spiegazione. Lo faccio dal '91 quindi, per quanto ne so, i miei motivi. –

risposta

55

C'è la versione breve tag del codice, che è ora completamente accettabile utilizzare nonostante le raccomandazioni antiquati altrimenti:

<tr><td> <input type="hidden" name="type" value="<?= $var ?>" ></td></tr> 

che (prima di PHP 5.4) richiede tag brevi essere abilitato la configurazione di PHP . Funziona esattamente come il codice che hai digitato; queste linee sono letteralmente identiche nella loro implementazione interna:

<?= $var1, $var2 ?> 
<?php echo $var1, $var2 ?> 

Questo è tutto per le soluzioni integrate. Esistono numerose librerie di modelli di terze parti che semplificano l'integrazione dei dati nell'output, smarty è un buon punto di partenza.

+4

@code_burgar I tag brevi non verranno rimossi da PHP6, né sono attualmente deprecati. – meagar

+1

Hmm, potrei sbagliarmi, ma ero abbastanza sicuro che venissero rimossi. Anche se rimangono, usarli è, nel migliore dei casi, una pratica dubbia. = whoops. Per non parlare sono disabilitati di default su alcuni server. –

+2

@code_burgar Non scrivere XML negli script PHP, XML codificare i dati e scrivere l'output risultante. Non ho mai incontrato un server con short_open_tags disabilitato. – meagar

18

Utilizzare la sintassi HEREDOC. È possibile combinare virgolette singole e doppie, variabili e persino chiamate di funzione con markup html inalterato/non scalato.

+2

Il mio unico problema con la sintassi HEREDOC è che annulla l'evidenziazione della sintassi per le porzioni HTML delle mie pagine. – meagar

+0

@meagar lo fa in alcuni editor, a meno che non si disponga di un set di regole per sovrascriverlo. –

+0

solo pregare che non sia mai necessario indicizzare le navi klingon :) sull'editor, utilizzare VIM – gcb

1

Ci sono molti sistemi di modelli che offrono una sintassi più compatta per le vostre visualizzazioni. Smarty è venerabile e popolare. This article elenca 10 altri.

1

Mi sconsiglio di utilizzare i tag di registrazione, vedere Are PHP short tags acceptable to use? per ulteriori informazioni sul motivo.

Personalmente non mi dispiace la miscelazione HTML e PHP in questo modo

<a href="<?php echo $link;?>">link description</a> 

Finché ho un codice-editore con una buona evidenziazione della sintassi, credo che questo è abbastanza leggibile. Se inizi a riprodurre l'HTML con PHP, perdi tutti i vantaggi della sintassi evidenziando il tuo HTML. Un altro svantaggio dell'eco HTML è la roba con le virgolette, il seguente è un IMHO molto meno leggibile.

echo '<a href="'.$link.'">link description</a>'; 

Il più grande vantaggio per me con semplice eco e semplice loop in PHP e fare il resto in HTML è che il rientro è coerente, che alla fine migliora la leggibilità/leggibilità.

+3

Nessuno dovrebbe * mai * usare quella domanda come riferimento, è un mucchio fumante di disinformazione e opinione soggettiva. – meagar

+0

@meagar: Esattamente! Per non parlare, un commento mette in evidenza [questo link] (http://php.net/manual/en/function.echo.php) specifica che il tag di eco breve è staccato dalla sintassi aperta breve da php5.4 in poi. Questo è ciò che dice (il manuale alla fine del link sopra). "** echo ha anche una sintassi di scelta rapida, in cui è possibile seguire immediatamente il tag di apertura con un segno di uguale. Prima di PHP 5.4.0, questa breve sintassi funziona solo con l'impostazione di configurazione short_open_tag abilitata. **" –

4

Penso davvero che dovresti adottare il motore di template Smarty come lib di php standard per i tuoi progetti.

http://www.smarty.net/

Name: {$name|capitalize}<br> 
+5

Cosa sono i tuoi argomenti a favore? – Rob

+2

argomenti a favore: - separazione del codice php da html (migliore per la manutenzione) - un modello smarty verrà visualizzato in un browser così com'è. (I progettisti front-end che non hanno esperienza di programmazione possono migliorarne la percezione) - memorizzazione nella cache. (puoi tenere più copie cache della tua pagina in base agli input, che può essere molto più veloce di generare di nuovo l'intera pagina) svantaggi - smarty è un po 'troppo potente, ei programmatori possono mettere troppa logica in un modello. .. ma almeno è logico display – Bingy

+0

Esattamente quello che sta dicendo. Non scrivi una classe di connessione al database per connettersi al tuo database giusto? perché scrivi un motore di template per creare template? – gcb

1

In una sezione php prima della sezione HTML, l'uso sprinf() per creare una stringa costante dalle variabili:

$mystuff = sprinf("My name is %s and my mother's name is %s","Suzy","Caroline"); 

Poi nella sezione HTML si può fare quello Ti piace, ad esempio:

<p>$mystuff</p>