Domanda

  • Il PHP short tag <?= $var ?> è stato obsoleto per un po'.
  • Quasi tutti Framework PHP utilizzare il formato lungo <?php echo $var ?> (ad esempio, sinfonia, Yii, Kohana)
  • Smarty è un famoso PHP template engine che supporta una forma più breve {$var}
  • Modello di motori (come Smarty più semplice per web designer
    • Modifica di un modello di mostra {$var} invece di mostrare nulla (perché di <..>)
    • Breve sintassi (meno digitando soprattutto quando <> sono sullo stesso tasto su alcuni layout di tastiera)
    • I modelli sono pre-compilati e cache, dando quasi la stessa spettacoli

Tutti quei punti mi chiedo, perchè fare tutto framework sembrano utilizzare la super lungo la sintassi del PHP?C'è un punto di forza non si utilizza un motore di template come Smarty (tranne il piccolo overhead)?

È stato utile?

Soluzione

Ecco cosa Fabien Potencier del framework Symfony ha da dire su motori di template:

Perché la gente ancora pensa che il PHP è un motore di template?Abbastanza sicuro, PHP ha iniziato la sua vita come un modello la lingua, ma non si è evoluta come uno negli ultimi anni.Se si pensa PHP è ancora un modello di lingua, può si dammi solo un recente cambio il linguaggio PHP che avanzata di PHP come un modello di lingua?Non mi vengono in mente uno.

Egli descrive anche le caratteristiche che cerca in un linguaggio di template:

  • Concisione
  • Modello orientato sintassi
  • Riusabilità
  • Sicurezza
  • La modalità Sandbox

Così come alcune delle caratteristiche che rendono il suo preferito linguaggio di template Twig si distinguono:

  • Nativo di ereditarietà dei template (modelli compilati in classi);
  • Solido automatico fuga (senza sovraccarico di runtime come tutto è fatto durante per la compilazione);
  • Molto sicuro in modalità sandbox (bianco-elenco delle variabili, filtri e metodi di può essere utilizzato in modelli);
  • Grande estensibilità:si ignora tutto, anche le funzioni di base, da impacchettare le proprie etichette e filtri un'estensione;ma si può anche manipolare l'AST (Abstract Syntax Albero) prima della compilazione.Da grazie a questa possibilità, si può anche creare il tuo DSL (Domain Linguaggio specifico), mirati a applicazione.

Nei commenti dell'articolo, dice che, "probabilmente sarà la parte di Symfony 2.Ma ho bisogno di qualche feedback della comunità."

Leggi l'articolo completo per ottenere tutto il suo argomento a favore di sistemi di templating.

Altri suggerimenti

La cosa di PHP è che già è un linguaggio di template.

Smarty, bello come lo è, si aggiunge in testa. Se non si dispone di una buona ragione per usarlo, allora perché dovresti? Le persone che fanno uso di strutture di back-end sono gli sviluppatori che hanno già familiarità con PHP, quindi non c'è alcun motivo per farli utilizzare un motore di template con una nuova sintassi per imparare su di esso.

La maggior parte delle strutture sono abbastanza flessibili che l'aggiunta di un motore di template non ci vuole molto lavoro. Se un quadro è stato costruito che ha costretto l'utilizzo di Smarty, quindi sta andando ad essere meno popolare, perché il framework stesso sarebbe meno flessibile.

Per quanto riguarda il "lungo sintassi", un quadro sta per appendere il loro cappello su una sintassi deprecato con problemi di sicurezza. Può essere lasciata all'utente del quadro, se vogliono usare o no (che nessuno dovrebbe essere in questi giorni), ma la costruzione di un quadro nucleo intorno al tag brevi rende meno portabile.

Non so che definirei <?php print $foo; ?> "sintassi lungo eccellente."

Il fatto è che a breve-tag non sono sempre abilitati sul server, mentre il valore predefinito standard è in genere. E 'più sicuro di andare quell'itinerario.

motori dei modelli come Smarty aggiungono un ulteriore livello di elaborazione che non è necessario - sono per lo più bloatware. Di solito aggiungere troppo di elaborazione aggiuntiva per ciò che equivale a zucchero sintattico. Utilizzando un motore di template quando i tag pieni PHP sono disponibili è come indossare catene - diventa un'altra lingua con le sue peculiarità proprie di imparare al fine di ottenere la stessa cosa con PHP regolare.

Nella mia esperienza ho visto raramente un non-programmatore completamente o facilmente utilizzare un motore di template. Prendete questi due casi:

Smarty:

<select>
{foreach from=$k item=v}
 <option value="{$v.value|escape:'html'}">{$v.label|escape:'html'}</option>
{/foreach}
</select>

PHP:

<select>
<?php foreach ($k as $v) { ?>
 <option value="<?php echo htmlentities($v['value']); ?>"><?php echo htmlentities($v['label']); ?></option>
<?php } ?>
</select>

Ora, la sintassi Smarty può essere leggermente più pulito - ma onestamente, è chiunque tranne un programmatore sta per essere in grado di lavoro sia con il codice impostato in modo confortevole? motori template Aggiungi un ulteriore livello di elaborazione / logica senza offrire grossi vantaggi.

Ci sono alcuni motivi:

  • Sono da deprecato dalle future versioni di PHP a causa di problemi di sicurezza.
  • Alcuni host disattivarli.

Altro:

sono PHP tag brevi accettabile da usare?

  

Non sono raccomandati perché si tratta di un   PITA se mai necessario spostare il   il codice a un server in cui non è   sostenuta (e non è possibile attivarla).   Come dici tu, un sacco di host condivisi fanno   shorttags sostegno, ma "lotti" non è tutto   di loro. Se si desidera condividere la vostra   script, è meglio usare il pieno   sintassi.

     

Sono d'accordo che      

Non compro la leggibilità come un motivo   tutti. La maggior parte degli sviluppatori gravi hanno la   possibilità di evidenziazione della sintassi   a loro disposizione.

Altro

http://terrychay.com/article/short_open_tag.shtml

brevi tag aperti sono non deprecato e saranno anche non essere rimosso in php6.

Gli articoli legati contengono anche un sacco di informazioni utili sul tema.

Rasmus Lerdorf (3 ° link):

  

La maggior parte degli argomenti che ho visto sono sostanzialmente dicendo <? è male e non dovrebbe nemmeno esistere, ma che non è la questione in corso. Esiste, e non stiamo rimuoverlo, per cui l'unico vero argomento qui è il fattore di WTF introdotto da codice che è in grado di abilitare o disabilitare questi tag al volo. Questo è il solo e unico valido argomento che ho visto. O se non il codice PHP può essere convalidato con xmllint e se <? è XML valido, il che ovviamente non è, è del tutto fuori luogo o meno. Sappiamo tutti che quando si utilizza <? non si è compatibile con XML. E per la stragrande maggioranza che è ok. [...]

     

La mia opinione è che la gente vuole di templating. Per quanto io odio il concetto, e sono sempre stati molto vocale a tale proposito, la gente vuole più semplici tag templating. Saranno anche andare, per quanto l'analisi di file e la generazione di codice PHP su ogni singola richiesta, al fine di utilizzare al posto di {blah} <?php blah() ?>. Il fatto che la gente è disposta a prendere un ordine di grandezza calo di prestazioni per lo zucchero sintattico è sconcertante per me, ma basta guardare tutti i sistemi di template là fuori. E sì, so che ci sono altri motivi per utilizzare template, come limitare il set di funzionalità per gli scrittori di modello non attendibili, ecc, ma si sarebbe sorpreso di come molte persone vogliono solo digitare meno e hanno le loro etichette siano più bella. Ottenere queste persone per passare a <?blah()?> è una vittoria per le prestazioni e la sanità mentale nel mio libro. Sì, non è una vittoria piena, ma è ancora una vittoria.


Personalmente, cerco di evitare i sistemi di templating come trovo la sintassi di PHP regolare molto più facile da usare come un linguaggio di template che reinventa cosa PHP può fare fuori dalla scatola. Con l'aggiunta di ViewHelpers, ogni progettista non dovrebbe avere troppi problemi utilizzando la sintassi normale. In realtà, ho sempre trovato l'argomento, i motori dei modelli (come Smarty ) sono più facili per i web designer abbastanza belittleing. La sintassi di PHP verbose potrebbe non essere attraente esteticamente, ma qualsiasi mezzo cervello può imparare.

Perché non vogliono per includere una libreria enorme come Smarty per rendere i loro modelli di alcuni caratteri più breve.

In aggiunta alle altre risposte ci sono un paio di cose che rendono Smarty (ed i motori dei modelli simili) problematico.

La prima è che hai bisogno di fuggire alcuni caratteri nel modello se si sta andando a mettere javascript in esso. Se il javascript è creato dinamicamente da PHP, esso diventa ancora peggiore; la leggibilità del codice che scende drasticamente.

Il secondo e più importante è che quando si lavora in un quadro OO decente Smarty gravemente diminuire la funzionalità del vostro codice. Quando si usa PHP come motore di template è possibile utilizzare $ this all'interno del vostro modello per chiamare i metodi del controllore di quella analisi del modello. Non solo, ma si ottiene l'accesso a tutti i metodi di controllo che ha ereditato. Con smarty si perde l'intero funzionalità perché $ questo non fa più riferimento al controller. In sostanza, invece di accedere l'intero quadro dal modello, si ha accesso solo alle funzionalità limitate di Smarty.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top