Perché si dovrebbe omettere il tag di chiusura?


374

Continuo a leggere è una cattiva pratica usare il tag di chiusura PHP ?>alla fine del file. Il problema dell'intestazione sembra irrilevante nel seguente contesto (e questo è l'unico argomento valido finora):

Le versioni moderne di PHP impostano il flag output_buffering in php.ini Se il buffering dell'output è abilitato, è possibile impostare intestazioni e cookie HTTP dopo aver emesso HTML perché il codice restituito non viene inviato immediatamente al browser.

Ogni libro di buone pratiche e wiki inizia con questa "regola", ma nessuno offre buone ragioni. C'è un altro buon motivo per saltare il tag PHP finale?


3
possibile duplicato di [perché in alcuni script omettono il tag php di chiusura?>] ( stackoverflow.com/questions/3219383/… )
Gordon,

@Christian - Vuoi dire che usare output_buffering è pigro o lasciar perdere ?>è pigro?
El Yobo,

4
@Gordon - Non penso che sia un duplicato, l'OP conosce le ragioni apparenti, vuole solo sapere se è stato completamente risolto con il buffering dell'output.
El Yobo,

5
Una domanda migliore sarebbe: perché si dovrebbe includere il tag di chiusura? Il codice è malvagio. Il miglior codice non è affatto un codice. Se un problema può essere eliminato anziché risolto con il codice, è meglio che avere il codice. In questo caso, non è necessario risolvere alcun problema. Il codice funziona bene senza il tag di chiusura.
still_dreaming_1

19
Oddio, questo non è il posto per le battaglie contro gli spazi della guerra santa, lol :)
Kevin Wheeler,

Risposte:


322

L'invio di intestazioni prima del normale corso può avere conseguenze di vasta portata. Di seguito sono riportati solo alcuni di quelli che mi sono venuti in mente al momento:

  1. Mentre le attuali versioni di PHP possono avere buffer di output attivo, i server di produzione reali su cui verrà distribuito il codice sono molto più importanti di qualsiasi macchina di sviluppo o test. E non sempre tendono a seguire immediatamente le ultime tendenze di PHP.

  2. Potresti avere mal di testa per inspiegabile perdita di funzionalità . Supponiamo che tu stia implementando un tipo di gateway di pagamento e reindirizzi l'utente a un URL specifico dopo la corretta conferma da parte del responsabile del pagamento. Se si verifica un tipo di errore PHP, anche un avvertimento o una fine della linea in eccesso, il pagamento potrebbe rimanere non elaborato e l'utente potrebbe comunque non essere pagato. Questo è anche uno dei motivi per cui il reindirizzamento inutile è malvagio e se il reindirizzamento deve essere usato, deve essere usato con cautela.

  3. È possibile che venga visualizzato il tipo di errori "Caricamento pagina annullato" in Internet Explorer, anche nelle versioni più recenti. Questo perché una risposta / json AJAX include qualcosa che non dovrebbe contenere, a causa delle terminazioni di riga in eccesso in alcuni file PHP, proprio come ho riscontrato qualche giorno fa.

  4. Se hai alcuni download di file nella tua app, anche loro possono rompersi, per questo motivo. E potresti non accorgertene, anche dopo anni, poiché l'abitudine di rottura specifica di un download dipende dal server, dal browser, dal tipo e dal contenuto del file (e forse da alcuni altri fattori con cui non voglio annoiarti) .

  5. Infine, molti framework PHP tra cui Symfony , Zend e Laravel (non si fa menzione di questo nelle linee guida per la codifica ma segue l'esempio) e lo standard PSR-2 (elemento 2.2) richiedono l'omissione del tag di chiusura. Il manuale stesso di PHP ( 1 , 2 ), Wordpress , Drupal e molti altri software PHP credo, consigliano di farlo. Se hai semplicemente l'abitudine di seguire lo standard (e installare PHP-CS-Fixer per il tuo codice) puoi dimenticare il problema. Altrimenti dovrai sempre tenere a mente il problema.

Bonus: alcuni gotcha (attualmente uno) relativi a questi 2 personaggi:

  1. Anche alcune librerie note possono contenere terminazioni di riga in eccesso dopo ?>. Un esempio è Smarty, anche le versioni più recenti di entrambi i rami 2. * e 3. * hanno questo. Quindi, come sempre, cerca il codice di terze parti . Bonus in bonus: una regex per l'eliminazione di finali PHP inutili: sostituisci (\s*\?>\s*)$con testo vuoto in tutti i file che contengono codice PHP.

Regex leggermente diverso che ho usato per trovare i tag con Netbeans IDE, per la finestra di dialogo Trova e sostituisci: \?>(?s:.){0,10}\Z Breve spiegazione: changeset.hr/blog/miscellaneous/catch-near-eof-with-regex
frnhr

@Cek, rileva qualsiasi testo, incluso il codice, che sia dopo 10 caratteri o meno ?>: ad es . Corrisponde ?> Helloa -e eliminerebbe- in <?php echo "test"; ?> Hello. Vorremmo cancellare solo i tag di chiusura.
Halil Özgür,

6
Peggio ancora, Apache 2.4.6 con PHP 5.4 in realtà seg rovina le nostre macchine di produzione quando c'è spazio vuoto dietro il tag di chiusura. Ho solo perso ore fino a quando finalmente ho ristretto il bug con lo strace. Ecco l'errore che apache getta: [core:notice] [pid 7842] AH00052: child pid 10218 exit signal Segmentation fault (11).
Artem Russakovskii,

3
@INTPnerd Oh, la domanda e la maggior parte delle risposte si riferiscono all'intestazione, quindi ho pensato che chiunque leggesse questo thread avrebbe avuto un'idea al riguardo. Il problema di fondo e la causa effettiva dei problemi in molte delle risposte qui sono gli spazi bianchi non necessari dopo ?>, che (proprio come qualsiasi output) fa sì che le intestazioni vengano inviate non appena vengono emesse. Non ci sono "intestazioni HTML" (oltre al <header>tag HTML5 non correlato ).
Halil Özgür,

2
Questo dovrebbe funzionare, indipendentemente dal modificatore globale: \ s * \?> \ S * \ Z Nota la '\ Z' alla fine. Ti assicura di catturare un tag di chiusura php se e solo se è l'ultimo spazio non bianco alla fine del file.
Erutan409,

122

Il motivo per cui dovresti lasciare il tag di chiusura php ( ?>) è che il programmatore non invii accidentalmente caratteri extra per la nuova riga.

Il motivo per cui non dovresti lasciare il tag di chiusura php è perché provoca uno squilibrio nei tag php e qualsiasi programmatore con una mezza mente può ricordare di non aggiungere ulteriore spazio bianco.

Quindi per la tua domanda:

C'è un altro buon motivo per saltare il tag php finale?

No, non c'è un altro buon motivo per saltare i tag php finali.

Finirò con alcuni argomenti per non preoccuparmi del tag di chiusura:

  1. Le persone sono sempre in grado di commettere errori, non importa quanto siano intelligenti. Aderire a una pratica che riduce il numero di possibili errori è (IMHO) una buona idea.

  2. PHP non è XML. PHP non ha bisogno di aderire agli standard rigorosi di XML per essere ben scritto e funzionale. Se un tag di chiusura mancante ti dà fastidio, ti è consentito utilizzare un tag di chiusura, non è una regola set-in-stone in un modo o nell'altro.


2
> qualsiasi programmatore con una mezza mente può ricordare di non aggiungere ulteriore spazio bianco. Ancora meglio, qualsiasi sviluppatore con 1/2 mente può aggiungere un hook pre-commit a SVC in modo che tutti gli spazi finali vengano automaticamente eliminati: niente confusione, niente confusione.
BryanH,

6
@BryanH, fino a quando non hai un file in cui è assolutamente necessario lo spazio bianco finale, ma è molto raro.
zzzzBov,

1
Hai ragione, ovviamente. Dai un'occhiata alla risposta di Mario per alcune alternative davvero interessanti.
BryanH,

> "Il motivo per cui non dovresti lasciare il tag di chiusura php è perché provoca uno squilibrio nei tag php e qualsiasi programmatore con una mezza mente può ricordare di non aggiungere ulteriore spazio bianco." Su Windows, forse. Su sistemi simili a UNIX, tutti i file terminano con \ n e i programmi lo aggiungono per te. EDIT: Aha! Come notato di seguito da @mario, PHP lo mangia, in realtà.
Andrea,

2
Ancora più significativo è che anche i programmatori con il doppio di una tripla di una mente sono umani e dimenticano qualcosa.
Sebastian Mach,

57

È una raccomandazione di stile di codifica per principianti , ben intenzionata e consigliata dal manuale .

  • Evitare, ?>tuttavia, risolve solo un piccolo tratto delle comuni intestazioni già inviate (output non elaborato , distinta base , avvisi, ecc.) E dei loro problemi di follow-up.

  • PHP in realtà contiene un po 'di magia per divorare singole interruzioni di riga dopo il ?>token di chiusura. Anche se ha problemi storici , e lascia i nuovi arrivati ​​ancora suscettibili agli editor traballanti e inavvertitamente mescolandosi in altri spazi bianchi dopo ?>.

  • Stilisticamente alcuni sviluppatori preferiscono visualizzare <?phpe ?>come istruzioni di elaborazione tag / XML SGML, il che implica la coerenza del bilanciamento di un token vicino finale. (Quale tra l'altro, è utile per la classe che unisce le dipendenze include per soppiantare il caricamento automatico file per file inefficiente.)

  • In qualche modo non comune l'apertura <?phpè caratterizzata come shebang PHP (e pienamente fattibile per binfmt_misc ), convalidando in tal modo la ridondanza di un corrispondente tag di chiusura.

  • Esiste un'ovvia discrepanza di consulenza tra il mandato obbligatorio delle guide alla sintassi PHP?>\n e le più recenti (PSR-2) che concordano sull'omissione.
    (Per la cronaca: Zend Framework postula l'uno sull'altro non implica la sua intrinseca superiorità. È un'idea sbagliata che gli esperti siano stati attratti / indirizzati al pubblico di API ingombranti).

  • Gli SCM e gli IDE moderni forniscono soluzioni integrate per lo più alleviando la cura dei tag vicini.

Scoraggiare qualsiasi uso del ?>tag di chiusura ritarda semplicemente a spiegare il comportamento di base dell'elaborazione PHP e la semantica del linguaggio per evitare problemi rari. È ancora pratico per lo sviluppo di software collaborativo a causa delle variazioni di competenza dei partecipanti.

Chiudi le varianti dei tag

  • Il tag di chiusura regolare ?> è anche noto come T_CLOSE_TAG"token vicino".

  • Comprende alcune incarnazioni in più, a causa del consumo magico di newline di PHP :

    ?>\n (Avanzamento riga Unix)

    ?>\r (Ritorno a capo, MAC classici)

    ?>\r\n (CR / LF, su DOS / Win)

    PHP non supporta tuttavia l'interruzione di riga combo Unicode NEL(U + 0085).

    Le prime versioni di PHP avevano compilazioni IIRC che limitavano un po 'l'agnosticismo della piattaforma (FI anche usato solo >come marker vicino), che è la probabile origine storica dell'elusione dei tag ravvicinati.

  • Spesso trascurato, ma fino a quando PHP7 li rimuove , il regolare <?phptoken di apertura può essere validamente accoppiato con il raramente utilizzato </script>come pedina di chiusura dispari .

  • Il " tag di chiusura ravvicinata " non è nemmeno uno - ha appena inventato quel termine per analogia. Dal punto di vista concettuale e d'uso __halt_compilerdovrebbe essere riconosciuto come token vicino.

    __HALT_COMPILER();
    ?>

    Che in pratica ha il tokenizer in seguito scartare qualsiasi codice o sezione HTML semplice. In particolare gli stub PHAR ne fanno uso, o la sua combinazione ridondante con ?>come raffigurato.

  • Allo stesso modo un vuotoreturn; sostituisce raramente gli script include, rendendo ?>inefficaci quelli con spazio bianco finale.

  • Quindi ci sono tutti i tipi di varianti di tag di chiusura soft / faux ; meno conosciuti e usati di rado, ma di solito per token commentati :

    • Spaziatura semplice // ? >per eludere il rilevamento tramite tokenizer PHPs.

    • O fantasiosi sostituti Unicode // ﹖﹥(U + FE56 SMALL QUESTION MARK, U + FE65 SMALL ANGLE BRACKET) che un regexp può cogliere.

    Entrambi non significano nulla per PHP , ma possono avere usi pratici per toolkit esterni PHP ignari o semi-consapevoli. catMi vengono in mente script di nuovo uniti, con conseguenti // ? > <?phpconcatenazioni che mantengono in linea la precedente sezione di file.

Quindi ci sono alternative dipendenti dal contesto ma pratiche a un'omissione di tag stretta imperativa.

La babysitter manuale di ?>tag vicini non è molto contemporanea in entrambi i casi. Ci sono sempre stati strumenti di automazione per questo (anche se solo sed / awk o regex-oneliners). In particolare:

tag phptags tidier

https://fossil.include-once.org/phptags/

Che potrebbe generalmente essere usato per i --unclosetag php per codice di terze parti, o piuttosto per risolvere qualsiasi (e tutti) problemi reali di spazi bianchi / DBA:

  • phptags --warn --whitespace *.php

Gestisce anche la --longconversione di tag, ecc. Per compatibilità runtime / configurazione.


7
Sì, la formulazione decisa e provocatoria attira i voti negativi. Da quello che ho letto nel tempo, tralasciando il token di chiusura non ha assolutamente svantaggi purché non si lavori con un software che non è in grado di gestirlo. A meno che tu non possa effettivamente dimostrare che omettere i token di chiusura è male e una cosa molto noob da fare, il mio
voto negativo

2
@Pichan: lo permetterò. Ma presumo che tu non abbia capito bene cosa ti viene detto qui. Evitare ed evitare sono due cose diverse. E i problemi risolti per metà sono il risultato di consigli sull'olio di serpente.
mario,

6
@mario: è una raccomandazione di stile di codifica per principianti . Non sono d'accordo. L'intero Zend Framework omette i tag di chiusura. Penso che sia una scelta molto personale, preferisco davvero lasciare il mio <? Php aperto e non mi sento un novizio :)
Daniele Vrut,

1
E l'HTML? È quindi necessario? Per esempio <?php if($var): ?>Hello World<?php endif; ?>??? Sono sinceramente curioso perché non è specificamente menzionato.
WASasquatch,

1
@WASasquatch Sì. Se passi dalla modalità HTML a quella PHP, avrai comunque bisogno di token vicini. (Non pertinente alla domanda originale qui.)
Mario

22

Non è un tag ...

Ma se ce l'hai, rischi di avere spazio bianco dopo di esso.

Se poi lo usi come un'inclusione nella parte superiore di un documento, potresti finire con l'inserimento di spazi bianchi (ad es. Contenuto) prima di tentare di inviare intestazioni HTTP ... cosa non consentita.


10
Se non è un tag che cos'è?
Danidacar,

Potete per favore fornire un esempio? Forse la mia configurazione php è incredibile, ma non riesco a riprodurre il problema.
danidacar,

2
file1.php: <?php $i = 1; ?> quindi file2.php:<?php include 'file1.php'; header('Location: http://www.google.com');?>
Quentin

1
Ci sono anche aspetti negativi nel buffering dell'output; utilizza più memoria sul server (poiché tutto l'output deve essere archiviato nella RAM fino a quando non viene emesso; senza buffering si va immediatamente). È anche leggermente più lento. Nessuno di questi sarà un problema nella maggior parte dei casi, ma io sono pigro comunque, quindi perché non lasciare semplicemente il tag di chiusura? Uso phpcsper garantire che il tag di chiusura rimanga di ogni singolo file e quindi non mi preoccupo del buffering dell'output :)
El Yobo,

1
@danip: se hai impostato il flag output_buffer nel file di configurazione php, non puoi riprodurre questo problema.
Jichao,

16

È abbastanza utile non lasciare entrare ?>.

Il file rimane valido per PHP (non un errore di sintassi) e come diceva @David Dorward consente di evitare di avere spazi bianchi / linee di interruzione (tutto ciò che può inviare un'intestazione al browser) dopo il ?>.

Per esempio,

<?
    header("Content-type: image/png");
    $img = imagecreatetruecolor ( 10, 10);
    imagepng ( $img);
?>
[space here]
[break line here]

non sarà valido.

Ma

<?
    header("Content-type: image/png");
    $img = imagecreatetruecolor ( 10, 10 );
    imagepng ( $img );

volere.

Per una volta, devi essere pigro per essere sicuro .


3
Ecco perché ho messo sicuro in corsivo. Ti impedisce di errori che potrebbero costarti molto tempo per uno spazio indesiderato dopo il ?>. sicuro potrebbe non essere la parola giusta qui. Ad ogni modo, non risolve nulla (per me non è un cattivo codice per prevenire le cose, echoqui sarebbe stato un brutto codice) ma / ed è ancora valido. Dimostrami male su questo.
Shikiryu,

Non ti ho votato male, a proposito. Ma il mio punto è compatibile con il tuo. Non risolve nulla. Non ho mai detto che non è valido, quindi non ho bisogno di provare nulla.
Christian,

1
Chouchenos, scommetto che intendevi sicuro, piuttosto che sicuro. IMHO un aspetto negativo per quello era troppo. Ti ho riportato al punto di partenza. ;-) Dopo tutto non stavi dicendo la cosa sbagliata. Anche le linee guida per lo sviluppo di PHP ti incoraggiano a farlo. In effetti è molto meglio fare affidamento sulla chiusura dell'omissione dei tag, piuttosto che sul buffering dell'output, per esempio. Quest'ultimo sarebbe come disattivare display_errors. Puro imbroglio. E una buona probabilità che la tua app non sia portatile. Penso davvero che, di regola, è meglio non fare affidamento sul buffering dell'output.
maraspin,

1
Non voglio mettere in discussione le persone a cui piace mettere ?>alla fine di un solo file php. ma hai mai avuto la necessità di eseguire il debug di alcuni errori causati da spazi finali? Inoltre, non tutti i server sono configurati allo stesso modo, specialmente quando si passa a un altro host, la rilevazione degli errori richiede molto tempo. Se vuoi metterlo, ?>fallo, se aggiungi anche un po 'di spazio finale e il tuo team ha bisogno di eseguire il debug che è pronto a dare la colpa a git ^^
CoffeDeveloper

16

Secondo i documenti , è preferibile omettere il tag di chiusura se si trova alla fine del file per il seguente motivo:

Se un file è puro codice PHP, è preferibile omettere il tag di chiusura PHP alla fine del file. Ciò impedisce che vengano aggiunti spazi bianchi accidentali o nuove righe dopo il tag di chiusura di PHP, il che può causare effetti indesiderati poiché PHP avvierà il buffering dell'output quando il programmatore non ha intenzione di inviare alcun output in quel punto dello script.

Manuale PHP> Riferimento lingua> Sintassi di base> Tag PHP


10

Bene, conosco il motivo, ma non posso mostrarlo:

Per i file che contengono solo codice PHP, il tag di chiusura ( ?>) non è mai consentito. Non è richiesto da PHP e ometterlo impedisce l'iniezione accidentale di spazio bianco finale nella risposta.

Fonte: http://framework.zend.com/manual/en/coding-standard.php-file-formatting.html


23
Il fatto che il tag sia "mai permesso" è probabilmente uno standard di codifica Zend, ma non è una regola di sintassi per la formattazione dei file PHP.
Matt Huggins,

9

Bene, ci sono due modi per vederlo.

  1. Il codice PHP non è altro che un insieme di istruzioni di elaborazione XML , e quindi qualsiasi file con .phpestensione non è altro che un file XML che viene analizzato per il codice PHP.
  2. In questo caso PHP condivide il formato dell'istruzione di elaborazione XML per i suoi tag di apertura e chiusura. Sulla base di ciò, i file con .phpestensioni POTREBBERO essere file XML validi, ma non devono esserlo.

Se ritieni che il primo percorso, tutti i file PHP richiedano tag di chiusura. Ometterli creerà un file XML non valido. Poi di nuovo, senza avere un'apertura<?xml version="1.0" charset="latin-1" ?> dichiarazione di , non avrai comunque un file XML valido ... Quindi non è un grosso problema ...

Se credi nel secondo percorso, questo apre le porte a due tipi di .phpfile:

  • File che contengono solo codice (file di libreria ad esempio)
  • File che contengono XML nativo e anche codice (file modello per esempio)

Sulla base di ciò, i file di solo codice possono terminare senza un ?>tag di chiusura . Ma i file di codice XML non sono OK per terminare senza una chiusura ?>poiché invaliderebbe l'XML.

Ma so cosa stai pensando. Stai pensando a ciò che conta, non renderai mai direttamente un file PHP, quindi chi se ne frega se è un XML valido. Bene, importa se stai progettando un modello. Se è XML / HTML valido, un normale browser non visualizzerà semplicemente il codice PHP (viene trattato come un commento). Quindi puoi deridere il modello senza dover eseguire il codice PHP in ...

Non sto dicendo che questo è importante. È solo una visione che non vedo espressa troppo spesso, quindi quale posto migliore per condividerla ...

Personalmente, non chiudo i tag nei file di libreria, ma nei file di modello ... Penso che sia una preferenza personale (e una linea guida per la codifica) basata più di ogni altra cosa ...


1
Questo è completamente falso. PHP NON traduce tali tag in XML e quindi non viene generato alcuno squilibrio.
Drachenkatze,

7
@Felicitus: Immagino che ti sia sfuggita la parte che dice "Non sto dicendo che questo è importante. È solo una visione che non vedo espressa troppo spesso, quindi quale posto migliore per condividerlo ..." Non riguarda PHP traduzione di tag in XML. Riguarda cosa succede quando un file viene interpretato in un contesto XML (come HTML, o editor, ecc.) ... Ma il punto è mancato ...
ircmaxell,

7

Oltre a tutto ciò che è già stato detto, aggiungerò un'altra ragione per cui è stato un grande dolore per noi eseguire il debug.

Apache 2.4.6 con PHP 5.4 in realtà presenta errori di segmentazione sulle nostre macchine di produzione quando c'è spazio vuoto dietro il phptag di chiusura . Ho solo perso ore fino a quando finalmente ho ristretto il bug con lo strace .

Ecco l'errore generato da Apache:

[core:notice] [pid 7842] AH00052: child pid 10218 exit signal Segmentation fault (11)

6

"C'è un'altra buona ragione (oltre al problema dell'intestazione) per saltare il tag php finale?"

Non si desidera generare inavvertitamente caratteri di spazi bianchi estranei durante la generazione di output binario, dati CSV o altri output non HTML.


1
Ho fatto lamentare un cliente perché il suo parser XML stava rifiutando il nostro output quando all'inizio aveva una riga vuota. Peggio ancora, stava succedendo solo su un server su sette con una riga aggiuntiva dopo il tag di chiusura in un file di configurazione non revisionato.
eswald,

5

Professionisti

Contro

Conclusione

Direi che gli argomenti a favore dell'omissione del tag sembrano più forti (aiuta a evitare grossi mal di testa con header () + è la "raccomandazione" di PHP / Zend). Ammetto che questa non è la soluzione più "bella" che abbia mai visto in termini di coerenza della sintassi, ma cosa potrebbe esserci di meglio?


2

Poiché la mia domanda è stata contrassegnata come duplicata di questa, penso che sia OK pubblicare perché NON omettere il tag di chiusura ?>può essere desiderato per alcuni motivi.

  • Con le istruzioni di elaborazione complete Sintassi ( <?php ... ?>), la fonte PHP è un documento SGML valido, che può essere analizzato ed elaborato senza problemi con il parser SGML. Con ulteriori restrizioni può essere valido anche XML / XHTML.

Nulla ti impedisce di scrivere codice XML / HTML / SGML valido. La documentazione di PHP ne è consapevole. Estratto:

Nota: nota anche che se stai incorporando PHP in XML o XHTML dovrai utilizzare i tag <? Php?> Per rimanere conforme agli standard.

Naturalmente la sintassi PHP non è rigorosa SGML / XML / HTML e si crea un documento, che non è SGML / XML / HTML, proprio come è possibile trasformare HTML in XHTML per renderlo conforme o meno a XML.

  • Ad un certo punto potresti voler concatenare le fonti. Questo non sarà facile come fare semplicemente cat source1.php source2.phpse si introduce un'incoerenza omettendo i ?>tag di chiusura .

  • Senza ?>è più difficile dire se il documento è stato lasciato in modalità PHP escape o PHP ignore mode (il tag PI <?phppotrebbe essere stato aperto o meno). La vita è più semplice se lasci costantemente i tuoi documenti in modalità PHP ignora. È come lavorare con documenti HTML ben formattati rispetto ai documenti con tag non chiusi, annidati male ecc.

  • Sembra che alcuni editor come Dreamweaver possano avere problemi con PI lasciato aperto [1] .


0

Se capisco correttamente la domanda, ha a che fare con il buffering dell'output e l'effetto che questo potrebbe avere sui tag di chiusura / chiusura. Non sono sicuro che sia una domanda del tutto valida. Il problema è che il buffer di output non significa che tutto il contenuto sia tenuto in memoria prima di inviarlo al client. Significa che parte del contenuto è.

Il programmatore può eliminare intenzionalmente il buffer o il buffer di output, quindi l'opzione buffer di output in PHP cambia davvero il modo in cui il tag di chiusura influisce sulla codifica? Direi che non lo è.

E forse è per questo che la maggior parte delle risposte è tornata allo stile e alla sintassi personali.


0

Ci sono 2 possibili usi del codice php:

  1. Codice PHP come definizione di classe o definizione di funzione
  2. Usa PHP come linguaggio modello (cioè nelle viste)

nel caso 1. il tag di chiusura è totalmente inutile, anche in questo caso vorrei vedere solo 1 (uno) tag di apertura php e NO (zero) tag di chiusura. Questa è una buona pratica in quanto rende il codice pulito e separa la logica dalla presentazione. Per il caso di presentazione (2.) alcuni hanno scoperto che è naturale chiudere tutti i tag (anche quelli elaborati da PHP), il che porta alla confusione, poiché in realtà il PHP ha 2 casi d'uso separati, che non devono essere mescolati: logica / calcolo e presentazione

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.