Para cerrar o no cerrar php

14

He leído que se recomienda (especialmente con php 7) no cerrar los archivos php con ?>

Muchos de mis archivos WP php terminan así:

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

¿Debo eliminar la etiqueta de cierre y tener algo como esto?

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

al final de mis archivos?

IXN
fuente
2
Si no hay nada después de su etiqueta php no cerrada, está completamente bien, como observé en muchos marcos como Laravel, no cierran la etiqueta php al final de los archivos, y por cierto, los archivos principales de WordPress también siguieron el mismo patrón y no cerró la etiqueta php al final, por lo que creo que deberíamos seguir el estilo de codificación de WordPress y no cerrarlos.
Amirmasoud
1
Boleto posiblemente relacionado en el trác: # 10633
Sven

Respuestas:

19

Sí, evite cerrar las etiquetas PHP al final del archivo, no solo con PHP 7, sino también con PHP 5.

La razón es que si cierra la etiqueta, todo lo que esté detrás de la etiqueta, incluso una línea en blanco, se enviará a la salida y hará que PHP envíe encabezados y evitará que se establezca la cookie, se redirija al trabajo, el feed sea válido, y así.

Supongo que alguna vez encontraste un mensaje como

No se puede modificar la información del encabezado: los encabezados ya enviados por (salida iniciada en ...) en ... en línea ...

Un cierre ?>al final del archivo puede ser la causa.

gmazzap
fuente
1
Creo que esta es la respuesta correcta. Incluso Underscores , de donde originalmente obtuve mi plantilla, ha eliminado la etiqueta de cierre en la última actualización.
IXN
@IXN Esto es correcto si todo el archivo es PHP y, por lo tanto, consiste en un solo bloque de código PHP (el bloque de código PHP está implícitamente cerrado al final del archivo). Sin embargo, si tiene múltiples bloques de código PHP y está mezclando HTML y PHP, como lo implica el ejemplo en su pregunta, entonces debe cerrar explícitamente el bloque de código PHP, como afirma TheDeadMedic en su respuesta.
MrWhite
Creo que la única excepción es si el último bloque de código php es seguido por html. Pero si los últimos símbolos en el archivo son?> Pueden / deben omitirse. O eso entiendo.
IXN
La razón principal para omitir (o incluir) la etiqueta PHP de cierre es evitar la introducción de errores tontos durante el desarrollo. Como se mencionó anteriormente, para un archivo totalmente PHP, esto puede evitar la salida accidental que resulta en un error. Para un archivo que ya está mezclando salida HTML y PHP, esto no puede dar lugar a un error. Sin embargo, la omisión de la etiqueta PHP de cierre en este segundo caso tiene el potencial de introducir errores, ya que ahora debe recordar cerrar explícitamente la etiqueta PHP antes de agregar contenido HTML final; esto no es algo que haga en un archivo de código PHP completo.
MrWhite
Si mira a través de la fuente WP, verá que (la mayoría) de PHP incluye omitir la etiqueta PHP final. Sin embargo, los archivos de plantilla (que mezclan bloques de código HTML y PHP) siempre incluyen la etiqueta PHP de cierre.
MrWhite
11

Dado su ejemplo específico, mantendría la etiqueta de cierre, es decir, las llamadas de función de una línea dentro de una plantilla. Es coherente y ayuda a la claridad (de la misma manera en que WordPress recomienda las comas finales para las matrices ); de lo contrario, imagine si un no desarrollador recogió su archivo y comenzó a agregarlo:

<?php get_footer();

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

Sin embargo, para todos los demás archivos (funciones, incluye, etc.), el consejo es definitivamente una buena idea:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

Encuentro que es más limpio, y como otros han mencionado, no hay riesgo de los temidos "encabezados ya enviados".

TheDeadMedic
fuente