PHP: parentesi o nessuna parentesi con if / for / while / ...?

6

Entrambe queste sintassi sono corrette ed equivalenti:

Con parentesi:

foreach ($listOfThings as $thing) {
  echo $thing;
}

Senza parentesi:

foreach ($listOfThings as $thing):
  echo $thing;
endforeach;

Due domande vengono in mente:

  • C'è una vera differenza tra loro o sono totalmente identici (ad esempio, l'esibizione)?

  • È sempre meglio usare lo stesso o entrambi, a seconda del contesto (ad esempio: riconoscere facilmente il codice relativo al framework).

Sospetto che tutto ciò sia una questione di gusti e standard aziendali, ma non ne sono sicuro.

    
posta SteeveDroz 07.07.2011 - 16:27
fonte

6 risposte

23

Dovresti sempre usare le parentesi . Attraverserai il codice (e anche alcuni framework!) Che non fanno parentesi su cicli brevi o if, ma quando si tratta di farlo, non c'è modo migliore per rendere il tuo codice confuso e difficile da leggere piuttosto che lasciare il parentesi. Non ci sono risultati significativi in entrambi i casi, per quanto ne so.

Queste due chiavi in più possono significare un mondo di differenza per qualcuno che legge il tuo codice.

    
risposta data 07.07.2011 - 16:31
fonte
11

La mia opinione è che usare le parentesi è migliore quando si ha a che fare con il codice PHP.

Mi piace il metodo "senza parentesi" quando si utilizza un foreach o un altro tipo di blocco ( if , while , ecc.) e c'è l'output HTML o qualcos'altro lì dentro. Questo perché ci può essere molto codice nel mezzo e rende chiaro cosa sta per finire. Per questo motivo, questo stile di codifica è diventato lo standard tra gli sviluppatori di temi Wordpress. (Per esempi, guarda il codice qui sotto: The Wordpress Loop ).

Nota: questa domanda è diversa dalla domanda "Devo usare parentesi per i blocchi a linea singola". La maggior parte delle lingue non ha un altro modo di delimitare i blocchi multi-linea. Nella maggior parte delle lingue, esiste un solo modo (ad es. Parentesi graffe) per i blocchi multilinea.

Ecco un semplice esempio di dove mi piace usare l'approccio "senza parentesi":

<?php foreach ($listeOfThings as $thing): ?>
    <li><?= $thing ?></li>
<?php endforeach; ?>
    
risposta data 07.07.2011 - 16:33
fonte
5

Sembra che io sia in minoranza qui, ma preferisco endforeach , endif ecc rispetto alle parentesi. Precisano chiaramente quale dichiarazione intendono chiudere, a differenza delle parentesi graffe (che chiudono semplicemente il blocco ancora aperto più vicino).

<? if (someCondition): ?>
    imagine a bunch of code here
    <? foreach ($rows as $row): ?>
       imagine a bunch more code here
    <? endforeach ?>    (without this, PHP complains about "unexpected T_ENDIF")
    and a bunch more here
<? endif ?>

<? if (someCondition) { ?>
    imagine a bunch of code here
    <? foreach ($rows as $row) { ?>
        imagine a bunch more code here
    <? } ?>             (without this, PHP complains about "unexpected $end")
    and a bunch more here
<? } ?>

Nel primo esempio, l'errore è praticamente limitato al blocco if (e qualsiasi cosa ci sia dentro), e PHP lo soffoca prima (e quindi, più vicino all'errore reale). Nel secondo, PHP arriva fino alla fine dello script prima di rendersi conto che le parentesi non corrispondono. È potenzialmente un codice molto più completo per cercare una parentesi graffa mancante.

Le persone che preferiscono le parentesi graffe sono tutte come "beh, se induci il codice correttamente, le parentesi graffe sono leggibili". Il problema è che ci sono un paio di problemi:

  • Non tutti sono religiosi riguardo la formattazione del codice come te. In particolare quel nuovo ragazzo che fissa il tuo codice mentre sei in vacanza.
  • Le parentesi graffe sono non "semplicemente leggibili". Periodo. Non mi importa quanto ti piaccia C, C #, Java o qualsiasi altra lingua ti abbia insegnato che le parentesi graffe erano una buona cosa. Il fatto è che esistono sintassi di gran lunga migliori per le strutture di controllo - e PHP ne include effettivamente una.
    • Le parentesi graffe sono punteggiatura. Un singolo carattere di punteggiatura. Spesso circondato da altri segni di punteggiatura, a questo. Sono facili da perdere. Mi sembra che il cervello cerchi effettivamente di filtrare la punteggiatura metà del tempo.
    • Non so del tuo editor, ma il mio evidenzia parole chiave. Si distinguono, sono più lunghe e sono quindi più facili da individuare. Evidenzia anche le parentesi graffe e tenta anche di evidenziare la parentesi graffa ... ma non importa quanto brillantemente colori le tue parentesi graffe, esse non risaltano come una parola intera evidenziata.
    • Le parentesi graffe dicono "chiudi qualcosa". Non dicono cosa chiudere. Semplicemente non possono comunicare tali informazioni per conto proprio. Si affidano a te sempre ( SEMPRE! ) indentazione "appropriatamente", e picchiano selvaggiamente qualsiasi programmatore che non lo fa (o usa spazi al posto di tabulazioni o tabulazioni invece di spazi, o qualunque sia la codifica del tuo animale domestico lo stile è). Questo o finisci per aggiungere commenti come // end if . E se mai ti trovi ad aggiungere commenti del genere ... perché diavolo dovresti evitare una parola chiave che fa esattamente la stessa cosa, ma può essere effettivamente verificata dall'interprete?
risposta data 07.10.2011 - 21:21
fonte
1

Preferisco usare le parentesi tutte le volte. Dopo diversi milioni di righe in varie lingue, credo che non utilizzarle possa portare a errori. L'errore più comune si verifica quando si aggiunge una linea da eseguire nel blocco e si dimentica di aggiungere le parentesi. Ho fatto questo errore io stesso in una clausola if e sono stato abbastanza fortunato da individuarlo nella prima manche. Non sono mai tornato a non usare parentesi da allora.

    
risposta data 07.07.2011 - 17:10
fonte
0

La sintassi senza parentesi è utile per inserire il codice HTML tra il ciclo come indicato nella risposta di dontangg. Rende il codice più leggibile.

    
risposta data 07.07.2011 - 16:41
fonte
0

Usa sempre parentesi.

Joel ha scritto un articolo sul fatto che il codice "sbagliato" sembra sbagliato. Tecnicamente, non c'è niente di sbagliato nell'omettere le parentesi. Ha menzionato questo punto esatto solo per poco ... l'idea era che non usare una parentesi in quegli scenari in cui è possibile potrebbe portare a futuri bug. Ad esempio, supponi di non usare parentesi e qualcuno arriva sperando di aggiungere una seconda istruzione al ciclo, ma dimentica parentesi, avrebbe introdotto un bug.

link

    
risposta data 07.07.2011 - 17:16
fonte

Leggi altre domande sui tag