Ometti terminando il punto e virgola in un tag: una buona idea?

8

È possibile omettere il punto e virgola in un tag.

Esempio:

<table>
  <th><td>Name</td><td>Email</td>
  <? foreach ($receivers as $receiver): ?>
  <tr>
    <td><?= $receiver->name ?></td>
    <td><?= $recevier->email ?></td>
  </tr>
  <? endforeach ?>
</table>

Nota <? endforeach ?> senza punto e virgola dopo endforeach . La documentazione PHP dice:

The closing tag of a block of PHP code automatically implies a semicolon; you do not need to have a semicolon terminating the last line of a PHP block.

Perché sto sollevando questo argomento?

Attualmente io e un mio amico lavoriamo in un progetto PHP proprietario con MVC (model-view-controller). Per la vista ho valutato alcuni motori di template PHP come Smarty, Moustache e persino progettato il mio motore di template sviluppato internamente. Ma quando leggo che PHP è un motore di template in sé qualcosa è andato « click » nella mia testa. Perché non accetti semplicemente nel team di utilizzare un sottoinsieme limitato di PHP come motore di template? E avere molte recensioni di codice per mantenere le regole?

E questo sottoinsieme potrebbe apparire come questo:

  • Utilizza solo tag brevi <? , <?= e ?>
  • Utilizza solo espressioni semplici senza effetti collaterali, in particolare non assegna variabili
  • Utilizza solo if , foreach e include per istruzioni
  • Utilizza solo la sintassi alternativa per le strutture di controllo
  • Hai solo una istruzione in un tag ogni

Questo è il contesto in cui omettiamo il punto e virgola finale, vale a dire <? endforeach ?> , <? endif ?> e <? include("list-contents.php") ?> .

Tuttavia, leggo spesso che l'omissione del punto e virgola è una cattiva pratica. Perché? È una cattiva pratica?

Sono felice che PHP consenta di omettere il punto e virgola finale perché questo riduce al minimo l'ingombro visivo nei file modello. Dovrebbero sembrare per lo più come file HTML con solo piccoli frammenti PHP qua e là. L'esempio sopra è quello che mi sto adoperando.

Cosa ne pensi di questo? Se sei contro: perché? Se lo sostieni: perché sarebbe una buona idea? Cosa dovrei dire al mio partner se mi sta riferendo del testo contro l'omissione del punto e virgola?

Esegui il tuo parere con fatti, riferimenti o la tua esperienza.

    
posta nalply 11.08.2012 - 21:11
fonte

3 risposte

1

Penso che sia una buona idea usare PHP, o almeno un sottoinsieme di, come linguaggio template. Sarà più facile per i nuovi sviluppatori integrarsi con il tuo sistema in quanto non esiste una sintassi di libreria speciale da apprendere e non hai il sovraccarico di quella libreria che analizza il modello solo per trasformarlo in PHP.

Inoltre, hai perso un contesto in cui avresti bisogno di eliminare il punto e virgola terminante nelle tue istruzioni di eco variabile, ad es. %codice%. Se non utilizzi il punto e virgola nei modelli, è davvero necessario non utilizzarli. Chiaramente il tuo esempio di codice non li usa ma volevo solo indicare il contesto mancante in cui non usare il punto e virgola.

La cosa veramente importante è avere il buy-in del team e assicurare la coerenza tra i tuoi modelli. Personalmente, trovo sconvolgente non avere il punto e virgola ... Istintivamente voglio aggiungere quei punti e virgola in tutte le tue istruzioni PHP. Hai una persona nella tua squadra con lo stesso livello di disturbo ossessivo compulsivo? Come reagiranno a questo? Se la tua squadra non ha il buy-in e una o due persone si oppongono con veemenza, fai in modo che difendano la loro decisione, allora forse questo non è il modo migliore per andare.

Un'altra potenziale trappola consisterebbe nell'integrare nuovi membri del team. Potrebbero anche non rendersi conto che puoi persino farlo, tornare nei tuoi modelli e inserire tutti i punti e virgola finali, laddove appropriato. Ovviamente questo è il caso di uno sviluppatore che non conosce tanto PHP quanto dovrebbe, ma è qualcosa che vorresti pesare nella tua decisione. Educare i nuovi sviluppatori junior che nei modelli non usano il punto e virgola per terminare, ma un altro codice che facciamo.

tl; dr

Ottieni il buy-in dal tuo team, assicurati che i tuoi modelli siano coerenti e abbia un piano ragionevole per istruire i nuovi sviluppatori su come il codice PHP nei modelli differisce dal codice PHP "normale" (sintassi alternativa, nessun punto e virgola che termina, permesso PHP strutture, ecc.)

    
risposta data 12.08.2012 - 16:24
fonte
2

Sono tutti per ometterli in questo caso, e lo faccio esattamente, in particolare perché in questo contesto io uso solo un'istruzione a riga singola o un blocco. Riduce il disordine visivo e in tutti i miei anni passati a fare ciò, non ha mai portato a un singolo problema.

    
risposta data 12.08.2012 - 16:03
fonte
0

Use only short tags

No. Per favore, dio no! Affidarsi a tag aperti brevi è una pessima idea. Rende solo il tuo codice meno portabile. I tag aperti brevi non sono abilitati di default su molti molti sistemi. E se vuoi condividere il codice con qualcuno che li ha disabilitati? Inoltre nulla è ottenuto da tag aperti brevi IMHO.

Use only the alternative syntax for control structures

Non riesco a vedere cosa vorresti ottenere da quello. Oltre a non avere una base di codice coerente.

Have only one statement in a tag each

Potrebbe anche complicare le cose. Quando hai qualche "modello" ingombra di tag aperti / chiusi ovunque.

Why not just agree in the team to use a limited subset of PHP as a template engine?

Dipende chi fa parte di quella squadra. Per esempio. useranno solo le persone che conoscono PHP? Oppure hai anche persone in quella squadra che hanno bisogno di cambiare i modelli che non conoscono PHP. Se è il primo vorrei semplicemente rilassarmi sui requisiti (ovvero le regole), perché quando le persone incontrano un problema che possono facilmente risolvere con tutta la potenza offerta da PHP e tu li limiti a risolverlo, potresti avere persone che infrangono il problema regole o ottenere codice molto disordinato. Tuttavia, se nel team ci sono persone che non conoscono PHP, potresti farla franca proprio così.

Ora per rispondere alla tua domanda:

However I read often that omitting terminating semicolons is a bad practice. Why? Is it a bad practice at all?

Durante la codifica (non importa quale lingua e non importa quale progetto) sempre devi ridurre il numero di wtf al minuto nel tuo codice. Quindi è una cattiva pratica, perché quando qualcuno guarda che può pensare all'inizio: hey qualcosa è strano lì! È solo che si usano persone PHP che ci sono punti e virgola per chiudere le dichiarazioni. Quindi, di nuovo, questo può dipendere dalle persone della tua squadra (ma hai chiesto esperienza personale). Oltre a questo è anche molto molto fastidioso passare da una sintassi all'altra quando le persone lavorano sia sul frontend (i template) che sul backend. Ed è incline a entrambi gli errori e fastidi nella squadra.

E infine sul fatto che PHP ti permette di fare qualcosa: PHP ti permette di fare ogni sorta di cose. Solo questo fatto non significa che dovresti usarlo. C'era un meta post una volta su Stack Overflow che su Stack Overflow non era l'esempio perfetto delle sue regole (o qualcosa del genere :)) che poteva essere usato anche per PHP. In PHP ci sono tutti i tipi di cose di FUBAR (sì, l'ho detto), ma ciò non dovrebbe significare che dovresti dire: ma ma PHP lo consente. Indovina quale PHP ti consente anche di eseguire query senza risanamento dei dati. PHP ti consente anche di scrivere tutto il codice su una singola riga. PHP ti consente anche di creare nomi di variabili come $S0mEvAriBLe . Tutte queste cose non significano che sia la cosa migliore da fare.

I miei 2 centesimi

    
risposta data 12.08.2012 - 16:43
fonte

Leggi altre domande sui tag