Chiudere o non chiudere php


14

Ho letto che si consiglia (soprattutto con php 7) di non chiudere i file php con ?>

Molti dei miei file php WP finiscono così:

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Devo rimuovere il tag di chiusura e avere qualcosa del genere

<?php get_sidebar(); ?>
<?php get_footer(); 

alla fine dei miei file?


2
Se non c'è nulla dopo che il tuo tag php non chiuso è completamente ok, come ho osservato in molti framework come Laravel, non chiudono il tag php alla fine dei file e, a proposito, anche i file core di WordPress hanno seguito lo stesso modello e non chiuso il tag php alla fine, quindi penso che dovremmo seguire lo stile di codifica di WordPress e non chiuderli.
Amirmasoud,

1
Biglietto eventualmente correlato su trac: # 10633
Sven

Risposte:


19

Sì, evita di chiudere i tag PHP alla fine del file, non solo con PHP 7, ma anche con PHP 5.

Il motivo è che se chiudi il tag, tutto ciò che è dopo il tag, anche una riga vuota, verrà inviato all'output e farà sì che PHP invii le intestazioni impedendo l'impostazione dei cookie, il reindirizzamento per funzionare, il feed per essere valido, e così via.

Immagino tu abbia mai incontrato un messaggio del genere

Impossibile modificare le informazioni di intestazione: le intestazioni già inviate da (output avviato da ...) in ... on line ...

Una chiusura ?>alla fine del file può essere la causa.


1
Credo che questa sia la risposta corretta. Anche Underscores , da cui originariamente ho ottenuto il mio modello, ha rimosso il tag di chiusura nell'ultimo aggiornamento.
IXN,

@IXN Questo è corretto se l'intero file è PHP e pertanto è costituito da un singolo blocco di codice PHP (il blocco di codice PHP è implicitamente chiuso alla fine del file). Tuttavia, se hai più blocchi di codice PHP e stai mescolando HTML e PHP, come implicito nell'esempio nella tua domanda, allora dovresti chiudere esplicitamente il blocco di codice PHP, come afferma TheDeadMedic nella sua risposta.
MrWhite

Penso che l'unica eccezione sia se l'ultimo blocco di codice php è seguito da HTML. Ma se gli ultimi simboli sul file sono?> Possono / dovrebbero essere omessi. Almeno così capisco.
IXN,

Il motivo principale per omettere (o includere) il tag di chiusura PHP è evitare di introdurre bug stupidi durante lo sviluppo. Come accennato in precedenza, per un file interamente PHP, questo può evitare l'output accidentale con conseguente errore. Per un file che sta già mescolando output HTML e PHP questo non può causare errori. Tuttavia, l'omissione del tag PHP di chiusura in questo secondo caso ha il potenziale per introdurre bug, poiché ora devi ricordare di chiudere esplicitamente il tag PHP prima di aggiungere contenuto HTML finale - questo non è qualcosa che fai nel file di codice interamente PHP.
MrWhite,

Se guardi attraverso la fonte WP, vedrai che (la maggior parte) del PHP include omettere il tag PHP finale. Tuttavia, i file modello (che mescolano blocchi di codice HTML e PHP) includono sempre il tag PHP di chiusura.
MrWhite,

11

Dato il tuo esempio specifico, terrei il tag di chiusura, cioè chiamate di funzione a una riga all'interno di un modello. È coerente e aiuta la chiarezza (allo stesso modo in cui WordPress consiglia le virgole finali per gli array ) - altrimenti immagina se un non sviluppatore ha raccolto il tuo file e ha iniziato ad aggiungerlo:

<?php get_footer();

<div>What the hell am I doing wrong?</div>

Tuttavia, per tutti gli altri file (funzioni, include ecc.), Il consiglio è sicuramente una buona idea:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

Trovo che sia più pulito, e come altri hanno già detto, nessun rischio di temere "intestazioni già inviate".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.