È una cattiva pratica usare? = tag in PHP?

157

Mi sono imbattuto recentemente in questo tag PHP <?= ?> e sono riluttante a usarlo, ma mi fa prurire così tanto che ho voluto prenderlo in considerazione. So che è una pratica sbagliata usare i tag brevi <? ?> e che dovremmo invece utilizzare i tag completi <?php ?> , ma che dire di questo: <?= ?> ?

Risparmierebbe la digitazione e sarebbe meglio per la leggibilità del codice, IMO. Quindi, invece di questo:

<input name="someVar" value="<?php echo $someVar; ?>">

Potrei scrivere in questo modo, che è più pulito:

<input name="someVar" value="<?= $someVar ?>">

Sta usando questo operatore disapprovato?

    
posta marco-fiset 05.06.2012 - 20:14
fonte

7 risposte

184

Storia

Prima che il treno di disinformazione arrivi troppo lontano dalla stazione, ci sono molte cose che devi capire sui tag brevi di PHP.

Il problema principale con i tag brevi di PHP è che PHP è riuscito a scegliere un tag ( <? ) che è stato utilizzato da un'altra sintassi, XML .

Con l'opzione abilitata, non sei stato in grado di eseguire l'output raw della dichiarazione xml senza ottenere errori di sintassi:

<?xml version="1.0" encoding="UTF-8" ?>

Questo è un grosso problema se si considera come sono comuni le analisi e la gestione XML.

Che cosa è circa <?= ?

Sebbene <? causi conflitti con xml, <?= non . Sfortunatamente, le opzioni di attivazione e disattivazione sono state associate a short_open_tag , il che significava che per ottenere il beneficio del tag eco breve ( <?= ), dovevi affrontare i problemi del tag aperto breve ( <? ). I problemi associati al tag aperto breve erano molto più grandi dei benefici del tag breve eco, quindi troverai un milione e mezzo di consigli per disattivare short_open_tag off, che dovresti .

Con PHP 5.4, tuttavia il tag di eco breve è stato riattivato separatamente dall'opzione short_open_tag . Considero questo come una conferma diretta della convenienza di <?= , in quanto non c'è nulla di fondamentalmente sbagliato in sé e per sé.

Il problema è che non puoi garantire che avrai <?= se stai provando a scrivere codice che potrebbe funzionare in una gamma più ampia di versioni di PHP.

ok, ora che è tutto fuori mano

Dovresti usare <?= ?

    
risposta data 05.06.2012 - 23:18
fonte
24

Spolvero il mio cappello PHP

Preferirei decisamente l'uso di <?= $someVar ?> rispetto al più dettagliato echo (semplicemente preferenza personale). Il solo lato negativo AFAIK è per gli utenti che eseguono pre-5.4.0, nel qual caso short_open_tag deve essere abilitato in php.ini .

Detto questo, se il tuo progetto non è OS, allora è un punto controverso. Se lo è, documenterei il fatto che short_open_tag s deve essere abilitato, o usare il più portatile delle due soluzioni.

    
risposta data 05.06.2012 - 20:23
fonte
20

Dovresti assolutamente cercare di evitare i tag in forma breve, che sia <? o <?= .

Il motivo tecnico principale è la portabilità, non si può mai essere sicuri che i tag del modulo breve funzioneranno per ogni impostazione, poiché possono essere disattivati, cercare la direttiva short_open_tag . Ma puoi sempre essere assolutamente certo che il modulo lungo funzionerà ovunque.

It would save some typing and it would be better for code readability, IMO.

Anche questa è una cattiva abitudine. Non posso davvero dirti cosa trovi più leggibile, ma sfido febbrilmente l'uso della leggibilità del codice come scusa per salvarti un paio di battute. Se sei preoccupato della leggibilità, dovresti utilizzare un motore di template, questo:

<input name="someVar" value="{someVar}">

è molto più leggibile da entrambi i tuoi esempi.

Infine, vale la pena notare che i tag short form sono esplicitamente scoraggiati dai principali progetti PHP, ad esempio PEAR e Zend Framework .

    
risposta data 05.06.2012 - 20:23
fonte
12

La documentazione PHP dice chiaramente che puoi usare i tag eco a breve in modo sicuro:

5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.

Anche se questo è per la versione 5.4 di PHP e maggiore, ma tutti dovrebbero almeno usare questo. Li preferirei solo per scopi di template.

    
risposta data 27.02.2016 - 16:17
fonte
9

Motivi per l'utilizzo di tag brevi:

  • Sono più brevi.

Motivi per non utilizzando tag brevi:

  • Introducono un altro getcha di configurazione - mentre controlli il server la maggior parte del tempo in un contesto professionale, se prevedi di rilasciare il tuo codice al pubblico in generale, i tag brevi potrebbero non essere corretti per le persone che lo usano, per esempio , hosting condiviso.
  • Rendono troppo semplice cadere casualmente le stringhe non sanificate nel tuo output. Questo è spaventoso perché potrebbe introdurre vulnerabilità XSS. Sebbene i tag lunghi non facciano nulla per impedirlo, segnalano al programmatore che forse quello che stanno facendo non è la cosa giusta, e dovrebbero iniziare a utilizzare un sistema di template che gestisce automaticamente la codifica HTML per loro adesso . L'output di stringhe dinamiche con tag lunghi è doloroso, che è una buona cosa (educativa).
risposta data 05.06.2012 - 21:16
fonte
3

Penso che la versione <?= sia una pratica buona / accettabile, a condizione che tu la usi solo per l'output finale di variabili ed eviti qualsiasi funzione-chiamate o logica ternaria che non siano direttamente correlate a presentazione dei dati.

È sicuramente molto meglio di <? echo($x); ?> ovunque.

A lungo termine, potresti voler esaminare i motori dei modelli come Smarty .

    
risposta data 05.06.2012 - 20:24
fonte
-3

Per essere onesti, penso che echeggiare un risultato qualunque sia il metodo (vecchia o nuova moda) è qualcosa di piuttosto obsoleto mentre MVC celebra già 33 anni.

Direi che sì, questa è una buona pratica per incapsulare i dati del server in arrivo (php) all'interno di un documento XML e elaborarlo nel tuo livello applicativo / client, risparmiando così anche l'idea di usare un tale tag.

    
risposta data 05.06.2012 - 21:41
fonte

Leggi altre domande sui tag